数据结构:栈的顺序存储结构
来源:互联网 发布:未来之星际淘宝主txt 编辑:程序博客网 时间:2024/05/16 14:26
栈(stack)是限定在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)
,栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。
示例程序:(改编自《大话数据结构》)
C++ Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
using namespace std;
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int top; //栈顶指针
} SqStack;
/* 构造一个空栈*/
bool InitStack(SqStack *Sq)
{
Sq->top = -1; //表示空栈
return true;
}
/* 置为空栈 */
bool ClearStack(SqStack *Sq)
{
cout << "Clear Stack ..." << endl;
Sq->top = -1;
return true;
}
bool StackEmpty(SqStack Sq)
{
if (Sq.top == -1)
return true;
else
return false;
}
int StackLength(SqStack Sq)
{
cout << "Stack Length : ";
return Sq.top + 1;
}
/* 返回栈顶元素 */
bool GetTop(SqStack Sq, ElemType *ptr)
{
if (Sq.top != -1)
{
*ptr = Sq.data[Sq.top];
cout << "Get Top Item " << *ptr << endl;
return true;
}
return false;
}
/* 压栈 */
bool Push(SqStack *Sq, ElemType Elem)
{
cout << "Push Item " << Elem << endl;
if (Sq->top + 1 > MAXSIZE - 1)
return false;
Sq->data[++Sq->top] = Elem;
return true;
}
/* 出栈 */
bool Pop(SqStack *Sq, ElemType *ptr)
{
if (Sq->top == -1)
return false;
*ptr = Sq->data[Sq->top--];
cout << "Pop Item " << *ptr << endl;
return true;
}
bool StackTraverse(SqStack Sq)
{
cout << "Traverse Stack ..." << endl;
if (Sq.top == -1)
return false;
for (int i = 0; i <= Sq.top; i++)
cout << Sq.data[i] << ' ';
cout << endl;
return true;
}
int main(void)
{
SqStack Sq;
InitStack(&Sq);
for (int i = 0; i < 5; i++)
Push(&Sq, i);
StackTraverse(Sq);
int result;
Pop(&Sq, &result);
StackTraverse(Sq);
GetTop(Sq, &result);
if (!StackEmpty(Sq))
cout << StackLength(Sq) << endl;
ClearStack(&Sq);
return 0;
}
using namespace std;
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int top; //栈顶指针
} SqStack;
/* 构造一个空栈*/
bool InitStack(SqStack *Sq)
{
Sq->top = -1; //表示空栈
return true;
}
/* 置为空栈 */
bool ClearStack(SqStack *Sq)
{
cout << "Clear Stack ..." << endl;
Sq->top = -1;
return true;
}
bool StackEmpty(SqStack Sq)
{
if (Sq.top == -1)
return true;
else
return false;
}
int StackLength(SqStack Sq)
{
cout << "Stack Length : ";
return Sq.top + 1;
}
/* 返回栈顶元素 */
bool GetTop(SqStack Sq, ElemType *ptr)
{
if (Sq.top != -1)
{
*ptr = Sq.data[Sq.top];
cout << "Get Top Item " << *ptr << endl;
return true;
}
return false;
}
/* 压栈 */
bool Push(SqStack *Sq, ElemType Elem)
{
cout << "Push Item " << Elem << endl;
if (Sq->top + 1 > MAXSIZE - 1)
return false;
Sq->data[++Sq->top] = Elem;
return true;
}
/* 出栈 */
bool Pop(SqStack *Sq, ElemType *ptr)
{
if (Sq->top == -1)
return false;
*ptr = Sq->data[Sq->top--];
cout << "Pop Item " << *ptr << endl;
return true;
}
bool StackTraverse(SqStack Sq)
{
cout << "Traverse Stack ..." << endl;
if (Sq.top == -1)
return false;
for (int i = 0; i <= Sq.top; i++)
cout << Sq.data[i] << ' ';
cout << endl;
return true;
}
int main(void)
{
SqStack Sq;
InitStack(&Sq);
for (int i = 0; i < 5; i++)
Push(&Sq, i);
StackTraverse(Sq);
int result;
Pop(&Sq, &result);
StackTraverse(Sq);
GetTop(Sq, &result);
if (!StackEmpty(Sq))
cout << StackLength(Sq) << endl;
ClearStack(&Sq);
return 0;
}
- 数据结构 栈的顺序存储结构
- 数据结构三栈的顺序存储结构
- 数据结构:栈的顺序存储结构
- 数据结构:栈的顺序存储结构
- 数据结构的顺序存储结构
- 进击的数据结构三之栈的顺序存储结构
- 栈的顺序存储结构的相关操作(数据结构)
- Python 数据结构 之 栈 的顺序、链式存储结构
- 数据结构--C语言实现栈的顺序存储结构
- 【数据结构】线性表的顺序存储结构
- 数据结构(队列):队列的顺序存储结构
- 【数据结构】线性表的顺序存储结构
- 【数据结构基础】栈--顺序存储结构
- java 数据结构之 顺序存储结构 栈
- 数据结构:栈的顺序存储
- 数据结构-栈的顺序存储
- 数据结构-栈的顺序存储
- 【数据结构】字符串顺序存储结构
- hdu1870
- 对上一篇文章的改写
- 每日学习总结4/22
- 未来IT人才市场最热门的12项技能
- 基于IOS的一个吐司提示框
- 数据结构:栈的顺序存储结构
- 团委所有进程无法启动 sudo:unable to open /var/lib/sudo/username/1
- 深入理解 Oracle 分区(3):分区表和分区索引概述
- hdu1873(看病要排队)
- IE下框架不显示问题的解决办法
- Linux为用户添加sudo权限
- Cisco VPN 5.02 on Vista will not uninstall
- c# 自带进制转换
- 【lua】小计setmetatable