本文最后更新于 1238 天前,其中的信息可能已经有所发展或是发生改变。
顺序栈(数组实现)
#include <stdio.h> //元素elem进栈,a为数组,top值为当前栈的栈顶位置 int push(int* a,int top,int elem) { a[++top]=elem; return top; } //数据元素出栈 int pop(int * a,int top) { if (top==-1) { printf("空栈"); return -1; } printf("弹栈元素:%d\n",a[top]); top--; return top; } int main(void) { int a[100]; int top=-1; top = push(a, top, 1); top = push(a, top, 2); top = push(a, top, 3); top = push(a, top, 4); top = pop(a, top); top = pop(a, top); top = pop(a, top); top = pop(a, top); top = pop(a, top); return 0; }
输出结果:
弹栈元素:4
弹栈元素:3
弹栈元素:2
弹栈元素:1
空栈
链栈
#include <stdio.h> #include <stdlib.h> typedef struct lineStack{ int data; struct lineStack * next; }lineStack; //stack为当前的链栈,a表示入栈元素 lineStack* push(lineStack * stack,int a) { //创建存储新元素的节点 lineStack * line=(lineStack*)malloc(sizeof(lineStack)); line->data=a; //新节点与头节点建立逻辑关系 line->next=stack; //更新头指针的指向 stack=line; return stack; } //栈顶元素出链栈的实现函数 lineStack * pop(lineStack * stack) { if (stack) { //声明一个新指针指向栈顶节点 lineStack * p=stack; //更新头指针 stack=stack->next; printf("出栈元素:%d ",p->data); if (stack) { printf("新栈顶元素:%d\n",stack->data); } else { printf("栈已空\n"); } free(p); } else { printf("栈内没有元素"); return stack; } return stack; } int main(void) { lineStack * stack=NULL; stack=push(stack, 1); stack=push(stack, 2); stack=push(stack, 3); stack=push(stack, 4); stack=pop(stack); stack=pop(stack); stack=pop(stack); stack=pop(stack); stack=pop(stack); return 0; }
输出结果:
弹栈元素:4 栈顶元素:3
弹栈元素:3 栈顶元素:2
弹栈元素:2 栈顶元素:1
弹栈元素:1 栈已空
栈内没有元素