用链表表示堆栈的操作(c语言)
#include<stdio.h>
#include<stdlib.h>
//链表表示堆栈
typedef struct stack
{
int data;
struct stack *next;
} stack;
stack *createstack()
{
stack *s;
s = (stack *)malloc(sizeof(stack));
s->next = NULL;
return s;
}
//头插法,s为头结点
void push(int item,stack *s)
{
stack *tmp;
tmp = (stack *)malloc(sizeof(stack));
tmp->data = item;
tmp->next = s->next;
s->next = tmp;
printf("%d已进栈\n",item);
}
//每次出栈的为s->next,也就是头结点的下一个
stack *pop(stack *s)
{
stack *top;
int topData;
if(s->next == NULL)
{
printf("栈为空\n");
return NULL;
}
else
{
top = s->next;
s->next = top->next;
topData = top->data;
printf("%d出栈\n",top->data);
free(top);
return s;
}
}
void printStack(stack *s)
{
while(s->next!=NULL)
{
printf("%d->",s->next->data);
s = s->next;
}
printf("\n");
}
int main()
{
int i,j;
stack *s = createstack();
for(i=1;i<=5;i++)
{
push(i,s);
}
for(j=0;j<5;j++)
{
pop(s);
}
printStack(s);
pop(s);
return 0;
}