1.栈的理解
栈的模型就不画了因为非常简单,想想***的弹夹如何装子弹,栈就是如此。栈是先进后出,或后进先出。栈是限制插入和删除只能在一个位置上进行的表,该位置就是末端,叫栈顶。基本操作Push(进栈)和Pop(出栈)。
2.栈的链表实现:默认函数输入的指针不为空
1
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
100
101
102
103
104
105
106
107
108
109
|
stack.h
#ifndef _STACK_
#define _STACK_
typedef
struct
Node{
int
Data;
struct
Node *Next;
}*Pstack,Stack;
int
IsEmpty(Pstack L);
Pstack CreateStack(
void
);
void
DisplayStack(Pstack L);
void
Push(
int
X,Pstack L);
int
Top(Pstack L);
void
Pop(Pstack L);
#endif
stack.c
#include<stdio.h>
#include<stdlib.h>
#include"stack.h"
/*判断栈是否为空*/
int
IsEmpty(Pstack L)
{
if
(NULL == L->Next)
{
return
0;
}
return
-1;
}
/*申请一个栈节点*/
static
Pstack MallocNode(
void
)
{
Pstack Temp = (Pstack)
malloc
(
sizeof
(Stack));
if
(NULL == Temp)
{
printf
(
"malloc error\n"
);
return
NULL;
}
return
Temp;
}
/*创建栈*/
Pstack CreateStack(
void
)
{
Pstack Temp = MallocNode();
if
(NULL == Temp)
{
printf
(
"CreateStack malloc error\n"
);
return
NULL;
}
Temp->Data = 0;
Temp->Next = NULL;
return
Temp;
}
/*显示栈所以数据*/
void
DisplayStack(Pstack L)
{
Pstack Temp = L->Next;
if
(0 == IsEmpty(L))
{
printf
(
"DisplayStack NULL Stack\n"
);
return
;
}
while
(NULL != Temp)
{
printf
(
"Stack = %d "
,Temp->Data);
Temp = Temp->Next;
}
printf
(
"\n"
);
}
/*压栈,向栈中放数据*/
void
Push(
int
X,Pstack L)
{
Pstack Temp = MallocNode();
if
(NULL == Temp)
{
printf
(
"Push MallocNode error\n"
);
return
;
}
Temp->Data = X;
Temp->Next = L->Next;
L->Next = Temp;
}
/*求栈顶元素*/
int
Top(Pstack L)
{
if
(0 != IsEmpty(L))
{
return
L->Next->Data;
}
printf
(
"IsEmpty\n"
);
return
-1;
}
/*弹出栈,删除栈节点*/
void
Pop(Pstack L)
{
Pstack Temp = L->Next;
if
(0 == IsEmpty(L))
{
printf
(
"Pop:IsEmpty\n"
);
return
;
}
L->Next = Temp->Next;
free
(Temp);
}
|
本文转自 8yi少女的夢 51CTO博客,原文链接:http://blog.51cto.com/zhaoxiaohu/1963117,如需转载请自行联系原作者