数据结构之链栈及其相关操作
#include <stdio.h>
#include <stdlib.h>
#define FLAG -1
typedef struct node
{
int data;
struct node *next;
}StackNode,*LinkStack;
void Create_Stack(LinkStack top);
void Show_LinkStack(LinkStack top);
int Stack_Empty(LinkStack top);
LinkStack Push_Stack(LinkStack top,int num);
LinkStack Pop_Stack(LinkStack top,int *e);
void main()
{
int e;
LinkStack top = NULL;
top = (LinkStack)malloc(sizeof(StackNode));
printf("创建一个栈:\n");
Create_Stack(top);
printf("遍历栈:\n");
Show_LinkStack(top);
top = Push_Stack(top,100);
printf("元素进栈并再次遍历栈:\n");
Show_LinkStack(top);
top = Pop_Stack(top,&e);
printf("元素出栈并再次遍历栈:\n");
Show_LinkStack(top);
printf("出栈的元素是:%d\n",e);
}
void Create_Stack(LinkStack top)
{
int x;
LinkStack r,s;
r = top;
scanf("%d",&x);
top->data = x;
scanf("%d",&x);
while(x != FLAG)
{
s = (LinkStack)malloc(sizeof(StackNode));
s->data = x;
r->next = s;
r = s;
scanf("%d",&x);
}
r->next = NULL;
}
void Show_LinkStack(LinkStack top)
{
LinkStack p;
p = top;
printf(" %d\n",p->data);
p = p->next;
while(p)
{
printf("↓\n");
printf(" %d\n",p->data);
p = p->next;
}
printf("\n");
}
int Stack_Empty(LinkStack top)
{
if(top == NULL)
return 1;
return 0;
}
LinkStack Push_Stack(LinkStack top,int num)
{
LinkStack s;
if(Stack_Empty(top))
{
printf("栈为空!");
exit(1);
}
s = (LinkStack)malloc(sizeof(StackNode));
s->data = num;
s->next = top;
top = s;
return top;
}
LinkStack Pop_Stack(LinkStack top,int *e)
{
LinkStack s;
s = top;
top = top->next;
*e = s->data;
free(s);
return top;
}