数据结构期末复习(いち)--顺序栈定义及使用

  1 #include <iostream>
  2 using namespace std;
  3 #define MAXSIZE 100  //顺序栈存储空间初始分配大小
  4 #define OK 1
  5 #define ERROR 0
  6 #define OVERFLOW -1
  7 typedef struct //顺序栈结构定义
  8 {
  9     int *base;  //栈底指针
 10     int *top;    //栈顶指针
 11     int stacksize;  //栈可使用的最大容量
 12 } Sqstack;
 13
 14 //初始化,构造一个空栈
 15 int Init_Stack(Sqstack &s)
 16 {
 17     s.base = new int[MAXSIZE]; //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
 18     if(!s.base)    exit(-1);  //分配失败则退出
 19     s.top = s.base;        //top初始为base,表栈空
 20     s.stacksize = MAXSIZE;
 21     return 0;
 22 }
 23
 24 //入栈操作
 25 int Push_Stack(Sqstack &s, int e)
 26 {
 27     if(s.top - s.base == s.stacksize)    //栈满退出
 28         return 1;
 29     *s.top++ = e; //将元素e压入栈顶,同时栈顶指针加1
 30     //等同于*s.top=e;s.top++;
 31     return 0;
 32 }
 33
 34 //出栈操作
 35 int Pop_Stack(Sqstack &s)
 36 {
 37     if(s.top == s.base)    return 1; //栈空
 38     --s.top;    //栈顶指针减1
 39     return 0;
 40 }
 41
 42 //取栈顶元素
 43 int Get_Top(Sqstack s)
 44 {
 45     if(s.top != s.base) //栈非空
 46         return *(s.top - 1); //栈顶指针不变,返回栈顶元素的值
 47 }
 48
 49 //输出栈
 50 void printstack(Sqstack s)
 51 {
 52     while((s.top != s.base))   //栈非空
 53     {
 54         cout << Get_Top(s) << " ";
 55         Pop_Stack(s);
 56     }
 57     cout << endl;
 58 }
 59
 60 int main()
 61 {
 62     Sqstack s;
 63     Init_Stack(s);
 64     for (int i = 0; i < 10; ++i)
 65     {
 66         Push_Stack(s, i);
 67     }
 68     int a, b;
 69     cout << "1--print,2--pop,3--push,0--exit\n";
 70     for(int i = 0; i < 4; ++i)
 71     {
 72         cin >> a;
 73         if (a == 1)
 74         {
 75             printstack(s);
 76         }
 77         else if (a == 3)
 78         {
 79             cout << "元栈为:";
 80             printstack(s);
 81             cout << "请输入要插入的数:";
 82             cin >> b;
 83             Push_Stack(s, b);
 84             cout << "插入后栈为:";
 85             printstack(s);
 86         }
 87         else if (a == 2)
 88         {
 89             cout << "元栈为:";
 90             printstack(s);
 91             //cout<<"请输入要插入的数:";
 92             //cin>>b;
 93             Pop_Stack(s);
 94             cout << "pop后栈为:";
 95             printstack(s);
 96         }
 97         else if (a == 0)
 98         {
 99             return 0;
100         }
101     }
102     return 0;
103 }

原文地址:https://www.cnblogs.com/DSYR/p/9162601.html

时间: 2024-11-13 08:05:44

数据结构期末复习(いち)--顺序栈定义及使用的相关文章

数据结构期末复习(三)

数据结构期末复习(三) 数组的存储结构 二维数组的顺序存储结构分为以行序为主序的存储方式和以列序为主序的存储方式. 以行序为主的存储方式就是常规的先存第0行的每列,再存第一行的每列,以此类推.以列为主的存储方式同理. 对于三维数组来说,按下标从左到右的顺序存储.例如,设a[0][0][0]的地址为p,则对于数组a[m][n][r],a[i][j][k] = p + (i*n*r + j*r + k)*l; 稀疏矩阵 三元组顺序表 转置函数最简单的方法就是row和col对应的值交换,并且row和c

数据结构期末复习第五章数组和广义表

数据结构期末复习第五章 数组和广义表 二维数组A[m][n]按行优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((i-1)*n+j-1)*d     设数组的基址为LOC(a00) :LOC(aij)=LOC(a00)+( i*n+j )*d    二维数组A[m][n]按列优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((j

数据结构:C_顺序栈的实现

数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typedef struct { int *base; int *top; int stacksize; }SqStack; |说明: 1.base表示栈底指针,在判断出栈.初始化和重新分配空间的时候需要用到. 2.top表示栈顶指针,是栈最关键和核心的组成,入栈时top向上移动,出栈时top向下移动. 3.此

数据结构C语言—顺序栈案例—十进制转二进制

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include "SeqStack.h" 4 5 void conversion(int); 6 SeqStack seq; 7 int main() 8 { 9 int n; 10 scanf("%d",&n); 11 conversion(n); 12 return 0; 13 } 14 15 void conversion(int N)

数据结构基础(6) --顺序栈的设计与实现

栈是一种只允许在一端进行插入或删除操作的线性表.其特点为:先进后出(FILO)/后进先出(LIFO); 栈 VS. 队列 栈和队列都是动态集合, 但在栈中, 可以去掉的是最近插入的那一个,:栈实现了一种后进先出(last-in, first-out)的策略;类似的, 在队列中, 可以去掉的元素总是在集合中存在时间最长的那一个:队列实现了先进先出(first-in, first-out)的策略[下一篇我们着重复习队列]. 栈的示意图: //顺序栈的实现与解析 template <typename

12. C#数据结构与算法 -- 顺序栈

理论基础: 栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入.删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,叫栈底(Bottom).当栈中没有数据元素时叫空栈(Empty Stack). 栈可以分为顺序栈和链栈. 用一片连续的存储空间来存储栈中的数据元素,这样的栈称为顺序栈(Sequence Stack).类似于顺序表,用一维数组来存放顺序栈中的数据元素.栈顶指示器top设在数组下标为0的端,top随着插入和删除而变化,当栈为空时,top=-1

数据结构笔记1顺序栈

#include<stdio.h> #include<conio.h>#include<stdlib.h>#define MAX 100typedef struct{ int data[MAX]; int top;}Stack;Stack s;//初始化 成功1int InitStack(Stack s){ s.top=-1; return 1;}//判空 非空1int StackEmpty(Stack s){ if(-1==s.top)  return 0; retu

数据结构与算法——顺序栈

今天总结栈的顺序存储结构 什么是栈? 栈是一种线性表,其特点是限定尽在表尾进行插入和删除操作,表尾栈一段也叫栈顶,另一端就是栈底了.既然栈是线性表,那么栈也就有两种存储数据的方式,顺序存储和链式存储.今天实现的是顺序存储的栈,也就顺序栈. 图示(来自百度图片): 顺序栈的实现: 栈的顺序存储还是比较简单的,就是对数组进行操作. <span style="font-family:Courier New;font-size:14px;">#include <iostrea

数据结构期末复习第三章栈和队列

第三章:栈和队列 栈的特性:后进先出(LIFO) 1.  输入序列为ABC,可以变为CBA时,经过的栈操作为( B )A. push, pop, push, pop, push, popB. push, push, push, pop, pop, popC. push, push, pop, pop, push, popD. push, pop, push, push, pop, pop 解析: ABC经过push,push,push操作后,从栈顶到栈底元素为CBA,经过pop,pop,pop出