#include<stdio.h>
#include<stdlib.h>
#define Status int
//数据类型
typedef struct
{
int number;
}ElemType;
//结点类型
typedef struct LNode
{
LNode *next;
ElemType data;
}LNode, *LinkList;
//初始化链表
Status InitStack(LinkList &S)
{
if(!S)
{
S = (LNode *)malloc(sizeof(LNode));
S->next = NULL;
}
return 1;
}
//插入结点
Status Push(LinkList &S, ElemType e)
{
if(!S)
return 0;
LNode *p = S; //注意链表的栈顶元素是S->next
LNode *q = (LNode *)malloc(sizeof(LNode));
q->data = e;
q->next = NULL;
q->next = p->next;
p->next = q;
return 1;
}
//删除栈顶结点
Status Pop(LinkList &S,ElemType &e)
{
if(!S && !S->next)
return 0;
LNode *p = S;
LNode *q;
q = p->next; //注意链表的栈顶元素是S->next
e = q->data;
p->next = q->next;
free(q);
return 1;
}
//取栈顶元素
Status GetTop(LinkList &S,ElemType &e)
{
if(!S && !S->next)
return 0;
e = S->next->data; //注意链表的栈顶元素是S->next
return 1;
}
//置空栈
Status ClearStack(LinkList &S)
{
if(!S || !S->next)
return 0;
S->next = NULL;
return 1;
}
//判断是否为空栈
Status StackEmpty(LinkList &S)
{
if(!S)
return 0;
if(!S->next)
return 1;
return 0;
}
//摧毁栈
Status DestroyStack(LinkList &S)
{
if(!S)
return 0;
LNode *p,*q;
p = S;
while(p)
{
q = p->next;
free(p);
p = q;
}
return 1;
}
void main()
{
LinkList S;
S = NULL;
InitStack(S);
ElemType x,y;
int num;
printf("输入入栈元素\n");
for(int i=0;i<=3;i++)
{
scanf("%d",&num);
x.number = num;
Push(S,x);
}
printf("删除栈顶元素\n");
Pop(S,y);
printf("%d\n",y.number);
printf("返回栈顶元素\n");
GetTop(S,y);
printf("%d\n",y.number);
ClearStack(S);
if(StackEmpty(S))
printf("现在是空栈!\n");
if(DestroyStack(S))
printf("销毁栈成功!\n");
}
【数据结构-C语言实现】链栈及其操作函数
最新推荐文章于 2024-09-15 11:59:30 发布