数据结构之进栈出栈操作

先建立一个结构体节点:

typedef struct Node{

int member;

 struct Node *pNext;

}Node,*pNode;

创建一个栈:

typedef struct stack{

pNode Top;

pNode Bot;

}Stack,*pStack;

//初始话栈内部

void Init_stack(pStack ps)

{

ps->Top= (pNode)malloc(sizeof(Node));

if (NULL == ps->Top)

exit(-1);

ps->Bot = ps->Top; 

ps->top->pNext = NULL;

}

//进栈操作

int Instack(pStack ps ,int data)

{

pNode pNew = (pNode)malloc (sizeof(Node));

pNew->member = data;

pNew->pNext = ps->Top;

ps->Top = pNew; //可以把它想象成一个书盒,然后你一本书一本书的朝里面放书

}

//出栈操作

//出栈操作需要释放空间

int Exit_Stack(pStack ps)

{

int m;

pNode pDel =(pNode)malloc(sizeof(Node));

pDel->member = ps->Top ->member ;

m = pDel->member

if (ps->Top == ps->Bot)

exit(-1);

pDel = ps->Top ;

ps->Top = ps->Top->pNext;

free(pDel);

return m;

}

//栈的遍历

int Tracestack(pStack ps)

{

if (ps->Top == ps->Bot)

exit(-1);

while (NULL != ps->Top->Next )

{

printf(“ps->Top->member=%d",ps->Top->member);

ps->Top = ps->Top->pNext;

}

return 0;

}//也可以用栈底不等于栈顶的方式来循环

时间: 2024-10-10 08:25:23

数据结构之进栈出栈操作的相关文章

多栈共享技术,双端栈的初始化、进栈、出栈操作

栈的应用非常广泛,经常会出现一个程序中需要同时使用多个栈的情况.若使用顺序栈,会因为对栈空间大小难以准确估计,从而产生有的栈溢出.有的栈空间还很空闲的情况.为了解决这个问题,可以让多个栈共享一个足够大的数组空间,通过利用栈的动态特性来使其存储空间互相补充,这就是多栈的共享技术. 在顺序栈的共享技术中,最常用的是两个栈的共享技术,即双端栈.它主要利用了栈的栈底位置不变,而栈顶位置动态变化的特性. 实现代码如下: #include<iostream> using namespace std; #d

数据结构-顺序栈(进栈 出栈)

#include<stdio.h> #define MaxSize 10 typedef struct SqStack{ int data[MaxSize]; int top ; }SqStack; //初始化顺序栈 void initStack(SqStack &S){ S.top = -1; } //判断栈是否为空 /*栈理论上不存在为满的情况,取决于内存大小*/ int isEmpty(SqStack S){ if(S.top == -1){//top为1表示为空 return

进栈出栈的合法性检查

栈与进栈出栈 栈:是限定在栈表尾进行插入或删除的线性表,又称为后进先出(LIFO)的线性表,这个特点可以形象的表示为--(铁路调度站) 只要保证每次在栈顶操作,同一进栈顺序可以有不同的出栈顺序,以下是部分出栈顺序 34521   25431  14532 32145    43215 那么究竟怎样验证一个出栈序列与一个入栈序列匹配? 思路:将进栈和出栈序列分别存在数组里,然后再创建一个辅助栈,把输入序列中的元素依次压入栈中,并按照出栈序列依次弹出. 将进栈和出栈序列存在两个数组里,然后再创建一个

Python模拟入栈出栈操作

目标: 1.编写菜单,提示用户操作选项(push,pop,view,quit) 2.规则:定义列表,先入栈,后出栈,后入栈,先出栈 1.模拟入栈.出栈操作 >>> list1 = [] >>> list1.append('a') >>> list1 ['a'] >>> list1.append('b') >>> list1 ['a', 'b'] >>> list1.pop() 'b' >>

在堆栈中,push为入栈操作,pop为出栈操作

LinkedList提供以下方法:(ArrayList无此类方法) addFirst(); removeFirst(); addLast(); removeLast(); 在堆栈中,push为入栈操作,pop为出栈操作. Push用addFirst():pop用removeFirst(),实现后进先出. 用isEmpty()--其父类的方法,来判断栈是否为空. 在队列中,put为入队列操作,get为出队列操作. Put用addFirst(),get用removeLast()实现队列. 1 pac

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明: 往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能 关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名 代码如下: #i

栈的链式存储结构和入栈出栈操作

参考<大话数据结构>P98~99——栈的链式存储结构. 进栈: 出栈: 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 typedef string status;//用书上推荐的status返回是否成功,C++中的模板类string比字符数组char[]更方便 6 7 //栈的结点 8 //包含data,和指向下一个结点

两栈共享空间的存储结构和入栈出栈操作

参考<大话数据结构>P95~96——两栈共享存储空间. 当两个栈的需求空间有相反关系时,也就是一个栈增长时,另一个栈在缩短,可以采用两栈共享空间结构.这是针对两个具有相同数据类型的栈的一个设计技巧. 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 #define MAXSIZE 6 //本例中栈满共6个元素 6 typed

数据结构经典问题——出栈顺序 转载至:canlynet微博

对于数据结构的问题,如果思路稍有不对,就容易陷入逻辑混乱.我希望自己对数据结构的理解,能够给大家一点帮助.我会将所有我有过心得的问题在我的博客上写出来,欢迎大家浏览,如果有什么不对的地方,还请大家指正,有问题可以给我留言,我会尽量解决,谢谢. 声明一下我写博客的初衷:不是炫耀,而是回报.因为我在计算机方面的知识好多都从网上找到答案,因此我也 将自己搜寻整理的材料,自己写的材料,展示到网上,算是尽一份力吧. 一个经典问题如下(不愿意看思路的可以直接看红色字体部分): 一个栈的入栈序列是a,b,c,