博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Stack_L.h
阅读量:5107 次
发布时间:2019-06-13

本文共 2094 字,大约阅读时间需要 6 分钟。

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
1
#include
<
cstdio
>
2
#include
<
cstdlib
>
3
//
链栈 Freeze 2010 10 4
4
typedef
struct
Point{
5
int
low;
6
int
high;
7
}Point;
8
typedef Point StackElemType;
9
10
typedef
struct
Node
11
{
12
StackElemType data;
13
struct
Node
*
next;
14
}Node;
15
typedef
struct
{
16
Node
*
base
;
//
存储空间基指针;
17
Node
*
top;
//
栈顶指点针
18
int
size;
//
长度,默认为0
19
}LiStack;
20
21
22
LiStack
*
initStack(LiStack
*
S);
//
构造一个空栈S
23
void
freeStack(LiStack
*
S);
//
若栈已存在,销毁栈S
24
bool
isEmpty(
const
LiStack
*
S);
//
若栈S为空,则返回ture,否则返回false
25
StackElemType
get
(
const
LiStack
*
S);
//
返回栈顶元素
26
Node
*
push(LiStack
*
S,StackElemType e);
//
入栈
27
StackElemType pop(LiStack
*
S);
//
出栈
28
29
30
//
构造一个空栈S
31
LiStack
*
initStack(LiStack
*
S)
32
{
33
S
=
(LiStack
*
)malloc(
sizeof
(LiStack));
34
if
(
!
S)
35
{
36
printf(
"
内存不足\n
"
);
37
exit(
1
);
38
}
39
S
->
top
=
NULL;
40
S
->
base
=
NULL;
41
S
->
size
=
0
;
42
return
S;
43
}
44
45
//
销毁栈S
46
void
freeStack(LiStack
*
S)
47
{
48
while
(S
->
size
>
0
)
49
pop(S);
50
free(S);
51
}
52
53
//
若栈S为空,则返回ture,否则返回false
54
bool
isEmpty(
const
LiStack
*
S)
55
{
56
return
(S
->
size
==
0
);
57
}
58
59
//
返回栈顶元素 若栈为空,则报错
60
StackElemType
get
(
const
LiStack
*
S)
61
{
62
if
(
!
isEmpty(S))
63
return
S
->
top
->
data;
64
else
{
65
printf(
"
空栈,无法入栈!\n
"
);
66
exit(
1
);
67
}
68
}
69
70
//
插入元素e成为新的栈顶元素
71
Node
*
push(LiStack
*
S,StackElemType e)
72
{
73
Node
*
temp
=
(Node
*
)malloc(
sizeof
(Node));
74
if
(
!
temp)
75
{
76
printf(
"
内存不足\n
"
);
77
exit(
1
);
78
}
79
temp
->
data
=
e;
80
if
(S
->
size
==
0
)
//
插入的是第一个元素
81
{
82
S
->
top
=
temp;
83
S
->
base
=
temp;
84
temp
->
next
=
NULL;
85
}
86
else
87
{
88
temp
->
next
=
S
->
top;
89
S
->
top
=
temp;
90
}
91
S
->
size
++
;
92
return
temp;
93
}
94
95
//
出栈
96
StackElemType pop(LiStack
*
S)
97
{
98
if
(isEmpty(S)){
99
printf(
"
空栈,无法出栈!\n
"
);
100
exit(
1
);
101
}
else
{
102
S
->
size
--
;
103
Node
*
temp
=
S
->
top;
104
StackElemType data
=
S
->
top
->
data;
105
S
->
top
=
temp
->
next;
106
free(temp);
107
return
data;
108
}
109
}

转载于:https://www.cnblogs.com/2010Freeze/articles/2047967.html

你可能感兴趣的文章
scanf函数
查看>>
HTML5——新表单元素 表单属性 语义元素
查看>>
CSS3—— 分页 框大小 弹性盒子 多媒体查询 多媒体查询实例
查看>>
使用反射获取Android中隐藏的方法
查看>>
【原创】Leetcode -- Reverse Linked List II -- 代码随笔(备忘)
查看>>
人脸识别技术开发人证比对访客系统
查看>>
Android之人脸识别
查看>>
HDU 5340——Three Palindromes——————【manacher处理回文串】
查看>>
二叉树的下一个节点
查看>>
Nginx配置文件详细说明
查看>>
遇到的Mysql的一个坑
查看>>
AC日记——「HNOI2017」单旋 LiBreOJ 2018
查看>>
vue总结
查看>>
真机调试的准备工作介绍
查看>>
(笔记)Linux内核学习(十一)之I/O层和I/O调度机制
查看>>
IIS注册 net环境
查看>>
P1242 新汉诺塔
查看>>
页面元素解绑click事件
查看>>
数据移植实验
查看>>
输入任意个数字求和的小程序
查看>>