博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈[链栈]
阅读量:6342 次
发布时间:2019-06-22

本文共 1908 字,大约阅读时间需要 6 分钟。

链栈和顺序栈的区别在于,链栈不受空间限制,根据链表生成,如图,首先观察它的特点:

灰色表示真实数据,而top指向的结点,称之为头结点,它的数据项没存入数据,仅仅是做为一个头结点存在。在链栈的初始化中,首先创建了一个头结点,但是里面没有存放数据,如果可能,存放链栈的长度也是可以的。

如果初始化不创建头结点,仅仅是将top=NULL,就省了一个头结点。而,多了一个头结点,计算的时候可能绕那么一点。反正,我不太习惯用这个头结点。

接下来,是入栈操作,归根到底还是单链表的细节操作,需要周转几步。这种手法在单链表的总结中会详细记录

链栈没有特别要说的地方,如果单链表熟练,这个应该不会有大问题,而问题在于,这种代码很容易前学后忘!

/*-----此链表带有头结点-------*//*-----可以改成不带头结点,更简练一些*/#include 
using namespace std;#define OK 1#define ERROR 0typedef struct node{ int data; struct node *next;}*ListStack,stack;void InitStack(ListStack &L)/*初始化*/{ L=(ListStack)malloc(sizeof(stack)); if(!L) exit(-1); L->next=NULL;}int PushStack(ListStack &top,int e)/*入栈!此创建带头结点*/{ ListStack p; if((p=(ListStack)malloc(sizeof(stack)))==NULL) exit(-1); p->data=e; p->next=top->next; top->next=p; return OK;}int PopStack(ListStack &top,int &e) /*出栈*/{ ListStack p;/*辅助指针p*/ p=top->next; if(!p) { cout<<"栈已空!"<
data; top->next=p->next; free(p); return OK;} void Traverse(ListStack &top)/*遍历,打印*/{ ListStack p=top->next; while(p) { cout<
data<<" "; p=p->next; };}void DestoryStack(ListStack &top)/*销毁*/{ if(top->next) { DestoryStack(top->next);/*采用递归方式销毁*/ free(top->next); top->next=NULL; }}int main(void){ int e; ListStack top; InitStack(top);/*初始化*/ PushStack(top,23);/*入栈*/ PushStack(top,20);/*入栈*/ PushStack(top,15);/*入栈*/ Traverse(top);/*遍历打印*/ PopStack(top,e);/*出栈*/ DestoryStack(top);/*销毁栈*/ return 0;}

补充:上面所说的头结点可以专门用一个结构体包括,其中包含一个top指针和计数count,方法如下:

先定义结点结构:

typedef struct node{    int data;    struct node *next;}*LinkStackPtr,Node;

接着再定义头结点

typedef struct LinkStack{    LinkStackPtr top;    int count;}LinkStack;

这样,头结点就比较独立,而且里面还包含一个计数功能

/*————————————————————————————*/

转载于:https://www.cnblogs.com/tinaluo/p/5246471.html

你可能感兴趣的文章
网络攻防 实验一
查看>>
由莫名其妙的错误开始---浅谈jquery的dom节点创建
查看>>
磨刀-CodeWarrior11生成的Makefile解析
查看>>
String StringBuffer StringBuilder对比
查看>>
.NET与C#
查看>>
在uwp仿制WPF的Window
查看>>
bootstrap随笔点击增加
查看>>
oracle 中proc和oci操作对缓存不同处理
查看>>
[LeetCode] Spiral Matrix 解题报告
查看>>
60906磁悬浮动力系统应用研究与模型搭建
查看>>
指纹获取 Fingerprint2
查看>>
SB阿里云,windows2012r2无法安装.net3.5
查看>>
函数的继承
查看>>
黑盒测试用例设计方法&理论结合实际 -> 场景法
查看>>
快速打开软件以及文件夹
查看>>
CSS选择符
查看>>
剑指offer---19--***-顺时针打印矩阵
查看>>
关于数组随机不重复的思路
查看>>
oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)
查看>>
Windows 安装 Jenkins 2.6
查看>>