链栈的操作
来源:互联网 发布:linux ibus pinyin 编辑:程序博客网 时间:2024/06/06 00:56
例1:完成Stack CreateStack(void)函数,该函数创建一个栈(空栈,带头结点),并返回栈指针。
Stack CreateStack()
{
Stack S; //定义一个栈指针
Node *p; //申请一个新节点
p=(Node*)malloc(sizeof(Node));
p->next=S;
S=p;
return S;
}
例2:完成void MakeEmpty(Stack S);函数,该函数把链栈置空(释放数据结点空间,但不释放头结点),已知S是带头结点的链栈。
void MakeEmpty(Stack S)
{
Stack p,q; //p为指向型指针,q为实际要释放的指针
p=S->next;
while(p)
{ //一个个注意释放节点。
q=p;
p=p->next;
free(q);
}
S->next=NULL;
}
例3:完成Stack DisposeStack(Stack S)函数,该函数销毁链栈S,已知S是带头结点的链栈。
Stack DisposeStack(Stack S)
{
Stack s;
while(S)
{
s=S->next;
free(s);
S=s;
}
return NULL;
}
例4:链栈的判空只要S->next==NULL则代表栈空。
例5:完成void Push(Stack S,ElemType x)函数,该函数把数据x进栈,已知S是带头结点的链栈。
void Push(Stack S,ElemType x)
{
Node *p;
p=(Node*)malloc(sizeof(Node));
if(p==NULL) //申请节点失败。
{
return ;
}
p->data=x;
p->next=S->next;
S->next=p;
}
例6:成void Pop(Stack S)函数,该函数把链栈S栈顶元素出栈,如果S已空,则什么都不做。已知S是带头结点的链栈。
void Pop(Stack S)
{
Node *p;
p=S->next;
if(p==NULL)
{
return; //考虑是一个空栈。
}
S->next=p->next;
free(p);
}
例7:完成ElemType Top(Stack S)函数,该函数返回链栈S的栈顶数据,已知S是带头结点的链栈并且S非空。
ElemType Top(Stack S)
{
return S->next->data;
}
例8:完成ElemType TopAndPop(Stack S)函数,该函数把返回链栈S栈顶数据并把栈顶数据出栈,已知S是带头结点的非空链栈。
ElemType TopAndPop(Stack S)
{
ElemType x;
x=S->next->data;
Stack p;
p=S->next;
S->next=p->next;
free(p);
return x;
}
- 链栈的操作
- 链栈的操作
- 链栈的操作
- 链栈的操作
- 链栈的一些操作
- 链栈的相关操作
- 链栈的一些操作
- 链栈的基本操作
- 链栈的基本操作
- 链栈的基本操作
- 链栈的相关操作
- 链栈的基本操作
- 链栈的基本操作
- 链栈的基本操作
- 链栈的基本操作
- 链栈的基本操作
- 链栈的基本操作
- 链栈的主要操作
- POJ_1000:翻转卡片
- WebRoot与WebContent区别
- react-native环境搭建采坑笔记
- vs无法命中断点,源代码与原始版本不同
- 最小公约数和公倍数
- 链栈的操作
- LInux基础之目录、文件相关知识总结
- 【Echarts】——上手Demo
- JavaSE_读取properties配置文件
- Response-1(八)
- 森林状的关系图
- Qt之图形(QPainter的基本绘图)
- 分块函数学习 I hate it + 优化
- c# winform编程之多线程ui界面资源修改总结篇