#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
typedef struct StackNode{
Elemtype data;
struct StackNode *next;
}StackNode,*LinkStackPtr;
typedef struct LinkStack{
LinkStackPtr top;
int size;
}LinkStack;
//初始化
void init_Stack(LinkStack *S)//没有头结点,初始化不需要为top申请空间
{
S->top=NULL;
S->size=0;
printf("OK\n");
}
//进栈
void push_Stack(LinkStack *S,Elemtype e)
{
LinkStackPtr p=(LinkStackPtr)malloc(sizeof(StackNode));
if(p!=NULL)
{
p->data=e;
p->next=S->top;
S->top=p;
S->size++;
printf("OK\n");
}
}
//出栈
void pop_Stack(LinkStack *S,Elemtype *e)
{
if(S->size!=NULL)
{
LinkStackPtr p=S->top;
*e=S->top->data;
S->top=S->top->next;
free(p);
p=NULL;
S->size--;
printf("OK\n");
}
}
//清空链栈
void clear_Stack(LinkStack *S)
{
LinkStackPtr p,q;
p=S->top;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
S->top=NULL;
S->size=NULL;
}
//打印
void print_Stack(LinkStack *S)
{
LinkStackPtr p=S->top;
if(!p)
{
printf("NULL\n");
return;
}
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
LinkStack S;
Elemtype e;int i;
while((i=getchar())!='#')
{
switch(i)
{
case '0':init_Stack(&S);break;
case '1':scanf("%d",&e);push_Stack(&S,e);break;
case '2':pop_Stack(&S,&e);break;
case '3':print_Stack(&S);break;
case '4':clear_Stack(&S);break;
case '5':printf("栈的当前长度为%d\n",S.size);break;
}
}
return 0;
}
数据结构中栈的链式结构—链栈的基本操作
最新推荐文章于 2023-10-09 13:10:27 发布