本文最后更新于 1095 天前,其中的信息可能已经有所发展或是发生改变。
顺序栈(数组实现)
#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 栈已空
栈内没有元素