四、数据结构基础之链栈C语言实现

 1 /*
 2  * 四、数据结构基础之链栈    
 3  * 链栈数据结构(结构的定义+在此结构上的操作)
 4  * --- 2012年4月28日 ---by lee
 5  */ 
 6 
 7 #ifndef _LINKED_STACK_H
 8 #define _LINKED_STACK_H
 9 
10 #include "Utility.h"
11 
12 //类型定义
13 typedef int DataType;
14 
15 //声明栈中结点类型
16 typedef struct _StackNode
17 {
18     DataType data;
19     struct _StackNode *next;
20 } StackNode;
21 
22 /*
23  * 声明链栈
24  * 链栈就是没有附加头结点的运算受限的单链表,栈顶指针就是链表的头指针
25  * 该类型主要是方便在函数体中修改栈顶指针本身的值,否则需要向函数传递指针的指针 
26 */
27 typedef struct _LinkedStack
28 {
29     StackNode *top; //栈顶指针
30 } LinkedStack;
31 
32 //对链栈的基本操作
33 
34 void InitStack(LinkedStack* stack);//初始化,构造空栈
35 int IsStackEmpty(LinkedStack* stack);//判断栈是否为空
36 void Push(LinkedStack* stack, DataType x);//元素x入栈
37 DataType Pop(LinkedStack* stack);//栈顶出栈,返回栈顶元素
38 DataType StackTop(LinkedStack* stack);//取栈顶元素
39 
40 //初始化,构造空栈
41 void InitStack(LinkedStack* stack)
42 {
43     stack->top=NULL;
44 }
45 
46 //判断栈是否为空
47 int IsStackEmpty(LinkedStack* stack)
48 {
49     return (NULL==stack->top);
50 }
51 
52 //元素x入栈
53 void Push(LinkedStack* stack, DataType x)
54 {
55     StackNode *node=(StackNode*)malloc(sizeof(StackNode));
56     node->data=x;
57     node->next=stack->top;
58     stack->top=node;
59 }
60 
61 //栈顶出栈,返回栈顶元素
62 DataType Pop(LinkedStack* stack)
63 {
64     //判断是否是空栈
65     if(IsStackEmpty(stack))
66         Error("Stack is empty");
67     StackNode *p=stack->top;
68     DataType ret=p->data;
69     stack->top=p->next;
70     free(p);
71     p=NULL;
72     return ret;
73 }
74 
75 //取栈顶元素
76 DataType StackTop(LinkedStack* stack)
77 {
78     //判断是否是空栈
79     if(IsStackEmpty(stack))
80         Error("Stack is null");
81 
82     return stack->top->data;
83 }
84 
85 
86 #endif
87 
88 //测试代码
89 /*
90     LinkedStack ls;
91     InitStack(&ls);
92     Push(&ls,1);
93     Push(&ls,2);
94     Push(&ls,3);
95     printf("stack top: %d\n",Pop(&ls));
96     printf("stack top: %d\n",Pop(&ls));
97 */

转载于:https://www.cnblogs.com/programlee/archive/2012/05/05/2485111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值