顺序栈的进栈,出栈

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define MAX 100
 4
 5 typedef struct
 6 {
 7     char c[MAX];
 8     int top;
 9 }*seqstack;
10
11 void InitStack(seqstack s);//建立一个空栈
12 int push(seqstack s,char a);//进栈
13 int pop(seqstack s,char *a);//出栈
14
15 int main()
16 {
17     seqstack s;
18     s=(seqstack)malloc(sizeof(seqstack));
19     InitStack(s);
20     char a;
21     a=getchar();
22     while(a!=‘\n‘)
23     {
24         push(s,a);
25         a=getchar();
26     }
27     while(pop(s,&a))
28         putchar(a);
29     printf("\n");
30     return 0;
31 }
32
33 void InitStack(seqstack s)//建立一个空栈
34 {
35     s->top=-1;
36 }
37
38 int push(seqstack s, char a)//进栈
39 {
40     if(s->top==MAX-1)
41         return 0;
42     s->top++;
43     s->c[s->top]=a;
44     return 1;
45 }
46
47 int pop(seqstack s,char *a)//出栈
48 {
49     if(s->top==-1)
50         return 0;
51     else
52     {
53         *a=s->c[s->top];
54         s->top--;
55         return 1;
56     }
57 }
时间: 2024-07-30 19:18:16

顺序栈的进栈,出栈的相关文章

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

#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

安卓 碎片 如何实现类似 活动 栈的 进栈 出栈

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 碎片 的 事物管理器 内部维持了 一个双向链表结构, 可以记录每次添加的碎片和 替代的 碎片. 然后 后退的时候, 会自动 出栈. 碎片,可以容易实现 局部更新. 原来 是把多个布局 放到 活动里. 现在可以用 碎片替代. 只在需要的时候加载 碎片. 提高了性能. 碎片 可以适应不同的屏幕尺寸. 切换碎片 ,通过 添加, 隐藏,添加另一个碎片.再次切换时,隐藏当前碎片,显示另一个.

进栈出栈的合法性检查

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

栈的合理出栈顺序(列车厢调度)

列车厢调度 一道较为明显的栈的可能出栈顺序的变式题,2是栈,3是出栈序列,很水一道变式应用 1 ====== <--移动方向 / 3 ===== 2 ====== -->移动方向 大家或许在某些数据结构教材上见到过"列车厢调度问题"(当然没见过也不要紧).今天,我们就来实际操作一下列车厢的调度.对照上方的ASCII字符图,问题描述如下: 有三条平行的列车轨道(1.2.3)以及1-3和2-3两段连接轨道.现有一列车厢停在1号轨道上,请利用两条连接轨道以及3号轨道,将车厢按照要

栈的基本操作 出栈与入栈

#include<stdio.h> #include<stdlib.h> #define LENGTH 100 //初始分配栈的长度 #define ADD_LEN 10 //栈长增量 typedef struct {//构造栈的数据类型 int *base; int *top; int stacksize; }SqStack; void CreateStack(SqStack &S);//初始化一个栈 void PushStack(SqStack &S,int e

栈的基本操作—出栈与入栈

#include<stdio.h> #include<stdlib.h> #define LENGTH 100 //初始分配栈的长度 #define ADD_LEN 10 //栈长增量 typedef struct {//构造栈的数据类型 int *base; int *top; int stacksize; }SqStack; void CreateStack(SqStack &S);//初始化一个栈 void PushStack(SqStack &S,int e

判断出栈序列是否可能是某个入栈序列的出栈序列,C++

主要思想栈必须满足先进后出的规则,例如: 压入序列1,2,3,4,5 出栈序列4,3,5,1,2 设定一个Max值代表目前已经出栈的压入序列索引号最大的值 如当4出栈的时候,目前Max是4,当3出栈的时候,就查看3,4是否出栈,如果出栈就正确 当1出栈的时候,目前Max是5,就查看1~5时候出栈,这时候2还没有出栈就认为这个出栈序列不符合先进后出 #include<iostream>#include<map>#include<vector>#include<mem

数据结构之进栈出栈操作

先建立一个结构体节点: 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(-

Python 根据入栈顺利判定出栈顺序

1.读取入栈,出栈数据: 2.把数据分别转化成整数列表: 3.新建栈列表,用入栈数据进行压栈:如果栈列表不为空,并且栈顶层数据为出栈的元素:删除栈列表的顶层数据: 4.如果栈列表不为空,说明栈列表里面的元素没有删除完:那么出栈就不成功:反之,成功: 1 import sys 2 while True: 3 try: 4 a = sys.stdin.readline().strip() # 入栈 5 b = sys.stdin.readline().strip() # 出栈 6 # 转化成列表 7

(源代码见大话数据结构)栈的顺序存储结构——进栈&amp;出栈

#include <stdio.h>#include <time.h>#include <stdlib.h>#define MAXSIZE 1000#define OK 1#define ERROR 0#define TRUE 1#define FALS 0typedef int SElemType;typedef int Status;typedef struct{    SElemType data[MAXSIZE];    int top;}SqStack;Sta