数据结构——顺序栈及其操作

 1 #include<iostream>
 2 using namespace std;
 3
 4 typedef int SElemType;
 5 typedef int Status;
 6 #define OK 1
 7 #define ERROR 0
 8
 9
10 #define MAXSIZE 100        //栈的最大空间
11
12
13 //顺序栈的存储结构
14 typedef struct SqStack
15 {
16     SElemType *base;    //栈底指针
17     SElemType *top;        //栈顶指针
18 }SqStack;
19
20
21 //初始化,构造一个空栈
22 Status InitStack(SqStack &S)    //构造一个空栈S
23 {
24     S.base = new SElemType[MAXSIZE];
25
26     if (!S.base)        //空间分配失败
27         return ERROR;
28
29     S.top = S.base;        //空栈
30     return OK;
31 }
32
33
34 //入栈
35 //插入元素e为新的栈顶元素
36 Status Push(SqStack &S, SElemType e)
37 {
38     if (S.top - S.base == MAXSIZE)        //栈满
39         return ERROR;
40
41     *(S.top++) = e;        //先e入栈,然后再栈顶指针+1
42     //注意这里的优先级,等价于*S.top = e; S.top++;
43     return OK;
44 }
45
46
47 //出栈
48 //删除栈顶元素,用e返回其值
49 Status Pop(SqStack &S, SElemType &e)
50 {
51     if (S.top == S.base)        //栈空
52         return ERROR;
53
54     e = *--S.top;        //栈顶指针减1,将栈顶元素赋值给e
55     return OK;
56 }
57
58
59 //取栈顶元素
60 SElemType GetTop(SqStack S)
61 {
62     if (S.top != S.base)    //栈非空
63         return *(S.top - 1);    //返回栈顶元素的值,栈顶指针不变
64     //注意用S.top - 1 而不是S.top--,因为这样就会改变栈顶指针
65 }
66
67
68 int main()
69 {
70     int n, x;
71     SqStack S;
72
73     InitStack(S);    //初始化顺序栈S
74
75     cout << "请输入顺序栈中的元素个数n:" << endl;
76     cin >> n;
77     cout << "请依次输入" << n << "个元素,依次入栈:" << endl;
78     while (n--)
79     {
80         cin >> x;
81         Push(S, x);
82     }
83     cout << "元素依次出栈:" << endl;
84     while (S.top != S.base)        //栈非空
85     {
86         cout << GetTop(S) << " ";
87         Pop(S, x);
88     }
89
90     system("pause");
91     return 0;
92 }

原文地址:https://www.cnblogs.com/friend-A/p/9072922.html

时间: 2024-10-10 12:57:52

数据结构——顺序栈及其操作的相关文章

数据结构 - 顺序栈的实行(C语言)

数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪一端来作为栈顶和栈底比较好? 对,没错,下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化最小,所以让它作栈底. 我们定义一个top变量来指示栈顶元素在数组中的位置,这top就如同中学物理学过的游标卡尺的游标,它可以来回移动,意味着栈顶的top可以变大变小,但无论如何游标不能超出尺的长度.同理

顺序栈的操作,整数进栈,取栈顶元素,栈内剩余元素

// main.cpp //  stack_quhao //  Created by duanqibo on 2019/6/29. //  Copyright © 2019年 duanqibo. All rights reserved. //  顺序栈的操作,整数进栈,取栈顶元素,栈内剩余元素 #include <iostream> #include <stdio.h> #include <stdlib.h> const int maxsize=6; /* typede

【数据结构之旅】顺序栈入门操作

说明: 书中已有关于顺序栈的类型定义.栈初始化.入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作. 1.程序功能 通过使用栈来编写一个程序,实现两个数的交换. 2.程序代码及注释 代码及注释如下: #include<stdio.h> #include<stdlib.h>    //导入stdlib.h模块是为了使用sizeof函数 typedef struct{    

数据结构--顺序栈的实现

最近在看严蔚敏的数据结构,以下是参照 http://blog.csdn.net/WLxinliang/article/details/52894338 手写的顺序栈的实现代码: 1.头文件定义了常数项 //constant.h #include<iostream> #include<string.h> #include<stdlib.h> #include<malloc.h> using namespace std; #define TRUE 1 #defi

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

#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

数据结构-顺序栈

1 #include <iostream> 2 #include <stdlib.h> 3 using namespace std; 4 5 #define maxSize 30 6 7 typedef struct 8 { 9 int data[maxSize]; 10 int top; 11 }SqStack; 12 13 void InitStack(SqStack &S) 14 { 15 S.top=-1; 16 } 17 18 int IsEmpty(SqStac

数据结构顺序表的操作全集(创建,遍历,插入,删除,排序等等)

#include"stdio.h" #include"stdlib.h" #include"malloc.h" #define list_size 100 typedef struct Node { int data[list_size]; int len; }NODE,* PNODE; void creat_list(PNODE L) { int i; int val; int len; /* PNODE L=(PNODE)malloc(siz

数据结构——顺序表及其操作

今天总结了一下顺序表的一些操作实现,算是这个本该上而没有上的体育课的一些小收获吧! BTW,青轴用起来是爽,但时间长了感觉自己的手指痛的不行呀/TOT/~~ 1 #include<iostream> 2 3 using namespace std; 4 5 #define MAXSIZE 100 //最大长度 6 #define OK 1 7 #define ERROR -1 8 9 10 //类型重命名 11 typedef int Elemtype; 12 typedef int Stat

数据结构——链栈及其操作

1 #include<iostream> 2 using namespace std; 3 4 typedef int Status; 5 typedef int ElemType; 6 #define OK 1 7 #define ERROR 0 8 9 10 //链栈的存储结构 11 typedef struct StackNode 12 { 13 ElemType data; //数据域 14 struct StackNode *next; //指针域 15 }StackNode,*Li