http://www.cnblogs.com/jingliming/p/4602458.html

栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈,栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元,依次存放从栈底到栈顶的数据元素,附设一个指针指示栈顶的元素在栈中的位置。

 1 //顺序栈的实现
 2 #define INFINITY 65535
 3 #define MAXSIZE 1000
 4 #define ElemType int
 5
 6 typedef struct {
 7     ElemType data[MAXSIZE]; //栈的大小
 8     int top;  //栈顶的游标
 9 }Stack;
10
11 class ArraryStack{
12 public:
13     void initStack(Stack *s); //初始化栈
14
15     bool isEmpty(Stack *s);  //判断栈是否为空
16
17     ElemType Top(Stack *s);  //返回栈顶的元素
18
19     ElemType Pop(Stack *s);  //返回并删除栈顶的元素
20
21     void Push(Stack *s,ElemType e); //将元素e压栈
22
23     void Print(Stack *s);  //输出从栈底到栈顶的元素
24
25     void Clear(Stack *s);  //清空栈元素
26
27 };
28
29 void ArraryStack::initStack(Stack *s)
30 {
31     s->top=-1;
32 }
33
34 bool ArraryStack::isEmpty(Stack *s)
35 {
36     if (s->top==-1)
37     {
38         return true;
39     }
40     return false;
41 }
42
43 ElemType ArraryStack::Top(Stack *s)
44 {
45     if (!isEmpty(s))
46     {
47         return s->data[s->top];
48     }
49     return INFINITY;
50 }
51
52 ElemType ArraryStack::Pop(Stack *s)
53 {
54     if (!isEmpty(s))
55     {
56         return s->data[s->top--];
57     }
58     return INFINITY;
59 }
60
61 void ArraryStack::Push(Stack *s,ElemType e)
62 {
63     if(s->top>=MAXSIZE-1)
64         return;
65      ++s->top;
66      s->data[s->top]=e;
67
68 }
69
70 void ArraryStack::Print(Stack *s)
71 {
72     for (int i=0;i<=s->top;i++)
73     {
74         printf("%d ",s->data[i]);
75     }
76     printf("\n");
77 }
78
79 void ArraryStack::Clear(Stack *s)
80 {
81     s->top=-1;
82 }
回到顶部(go to top)

第二部分:链式栈的实现

  1 //链式栈的声明
  2 template<typename T>
  3 struct LinkNode{
  4
  5     LinkNode* next;
  6     T data;
  7 };
  8
  9 //链式栈的实现
 10 template<typename T>
 11 class LinkStack
 12 {
 13 public:
 14     LinkStack();
 15     ~LinkStack();
 16     void Push(T value);
 17     T Pop();
 18     T Top();
 19     int Size();
 20     bool isEmpty();
 21
 22 private:
 23     LinkNode<T> *pHead;
 24 };
 25
 26 template<typename T>
 27 LinkStack<T>::LinkStack()
 28 {
 29
 30     pHead=new LinkNode<T>;
 31     if(pHead==NULL)
 32         cout<<"构建头结点空间失败。"<<endl;
 33     else
 34     {
 35         pHead->next=NULL;
 36         pHead->data=NULL;
 37     }
 38 }
 39
 40 template<typename T>
 41 LinkStack<T>::~LinkStack()
 42 {
 43
 44 }
 45
 46 template<typename T>
 47 void LinkStack<T>::Push(T value)
 48 {
 49     LinkNode<T> *p=new LinkNode<T>;
 50     p->data=value;
 51     p->next=pHead->next;
 52     pHead->next=p;
 53 }
 54
 55 template<typename T>
 56 T LinkStack<T>::Pop()
 57 {
 58     T value;
 59     LinkNode<T> *p=pHead->next;
 60     if (p!=NULL)
 61     {
 62         value= p->data;
 63         pHead->next=p->next;
 64         delete p;
 65         p=NULL;
 66         return value;
 67     }
 68     else
 69     {
 70
 71         cout<<"没有结点"<<endl;
 72         return NULL;
 73     }
 74
 75 }
 76
 77 template<typename T>
 78 T LinkStack<T>::Top()
 79 {
 80     LinkNode<T> *p=pHead->next;
 81     if (p!=NULL)
 82     {
 83         T value=p->data;
 84         return value;
 85     }
 86     else
 87     {
 88
 89         cout<<"头结点为空。"<<endl;
 90         return NULL;
 91     }
 92 }
 93
 94 template<typename T>
 95 int LinkStack<T>::Size()
 96 {
 97     int count=0;
 98     LinkNode<T> *p=pHead->next;
 99     while(p!=NULL)
100     {
101
102         ++count;
103         p=p->next;
104     }
105     return count;
106 }
107
108 template<typename T>
109 bool LinkStack<T>::isEmpty()
110 {
111     LinkNode<T> *p=pHead->next;
112     if (p==NULL)
113     {
114         return true;
115     }
116     return false;
117 }

测试用例:

 1 int main()
 2 {
 3     LinkStack<int> sta;
 4     sta.Push(1);
 5     sta.Push(2);
 6     sta.Push(3);
 7     cout << "The size of the stack now is " << sta.Size() << endl;
 8     sta.Pop();
 9     cout << "The top element is " << sta.Top() << endl;
10     cout << "The size of the stack now is" << sta.Size() << endl;
11     if (sta.isEmpty())
12     {
13         cout << "This stack is empty." << endl;
14     }
15     else
16     {
17         cout << "This stack is not empty." << endl;
18     }
19     system("pause");
20     return 0;
21 }

数据结构--顺序栈和链式栈相关推荐

  1. 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

    摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...

  2. 数据结构 :: 顺序栈与链式栈的设计与实现

    数据结构 :: 双链表的设计与实现 说明:本文属于读书笔记.笔者将以讲述的方式表达全片文章.故文中提到的某些字词是非正式术语,只是笔者本人的理解性词语. 前言:本文将对顺序栈与链式栈进行设计与实现!其 ...

  3. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  4. java顺序栈和链栈_Java的顺序栈和链式栈

    栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...

  5. 【数据结构】栈-顺序栈、链式栈、共享栈

    栈的定义 栈(Stack):只允许在一端进行插入或删除操作的线性表 栈顶(Top):线性表允许进行插入和删除的那一端. 栈底(Bottom):固定的,不允许进行插入和删除的另一端. Tips: 1.栈 ...

  6. 【数据结构与算法】栈的基本运算(出栈、入栈、销毁栈等)及源码(顺序栈和链式栈)

    一.顺序栈 .h文件 #include <iostream> using namespace std;#define STACKSIZE 100 typedef int DataType; ...

  7. 数据结构-顺序栈、链栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  8. C语言 数据结构 顺序栈的实现 进栈 出栈 初始化

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.代码实现 前言 顺序栈是栈的顺序实现.顺序栈是指利用顺序存储结构实现的栈.采用地址连续的存储空间(数组)依次存储栈 ...

  9. 天勤考研数据结构———顺序栈、链栈操作

    typedef struct{                //定义顺序栈     int data[maxsize];     int top;//定义栈顶指针 }SqStack; void in ...

最新文章

  1. 遍历百万级Redis的键值的续集
  2. uboot---linux
  3. 对于python 3.x与python2.x中新型类的继承特性总结
  4. qgis在地图上画导航线_在Laravel中的航线
  5. 虚拟机开启mysql服务_远程操作虚拟机中的mysql服务器
  6. 工具-管理工具资源集合
  7. ajax中GET和POST区别
  8. c语言中sys是什么文件夹,windows系统中C盘的pagefile.sys是什么文件
  9. 云数据库PostgreSQL新人怎样上手
  10. w7计算机管理哪个是显卡,win7怎么看显卡配置以及win7怎么看电脑完整配置
  11. 机器学习scikit-learn(一)(转)
  12. 通过虚拟驱动vivi分析摄像头驱动
  13. win 10 桌面突然多了一个IE图标无法上删掉,怎么办?
  14. 数字数据转换为字符数据_为什么替代数据对数字转换至关重要
  15. SSD: Single Shot MultiBox Detector 论文翻译
  16. eclipse资源管理器直接打开文件目录方法
  17. Silverlight技术是什么
  18. 大数据安全运营内容包括哪些?
  19. archlinux什么桌面好_浅谈Linux桌面(发行版及桌面环境)
  20. Web前端学习之Web设计与Web开发

热门文章

  1. Mysql数据库安全管理配置
  2. display:none;与visibility:hidden;的区别
  3. -bash: belts.awk: command not found
  4. JAVA多线程学习3--线程一些方法
  5. [转载]FPGA/CPLD重要设计思想及工程应用(时序及同步设计)
  6. Oracle中用For Loop 替代Cursor
  7. html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性
  8. java gson fromjson,Gson的fromJson()方法
  9. win8.1 计算机 桌面快捷方式,win8.1操作系统中我的电脑在哪里?win8.1我的电脑快捷键添加方法介绍...
  10. 乐高无限的服务器怎么建,乐高无限悬空房子怎么建造 建造方法介绍