博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈的链式实现
阅读量:5050 次
发布时间:2019-06-12

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

stackli.h

1        /* 栈的链表实现的类型声明*/ 2  3         typedef int ElementType; 4 /* START: fig3_39.txt */ 5         #ifndef _Stack_h 6         #define _Stack_h 7  8         struct Node; 9         typedef struct Node *PtrToNode;10         typedef PtrToNode Stack;11 12         int IsEmpty( Stack S );13         Stack CreateStack( void );14         void DisposeStack( Stack S );15         void MakeEmpty( Stack S );16         void Push( ElementType X, Stack S );17         ElementType Top( Stack S );18         void Pop( Stack S );19 20         #endif  /* _Stack_h */21 22 /* END */

 

stackli.c

1         #include "stackli.h"  2         #include "fatal.h"  3         #include 
4 5 struct Node 6 { 7 ElementType Element; 8 PtrToNode Next; 9 }; 10 11 /* START: fig3_40.txt */ 12 13 /* 判断栈是否为空 */ 14 int 15 IsEmpty( Stack S ) 16 { 17 return S->Next == NULL; 18 } 19 /* END */ 20 21 /* START: fig3_41.txt */ 22 23 /* 创建一个空栈 */ 24 Stack 25 CreateStack( void ) 26 { 27 Stack S; 28 29 S = malloc( sizeof( struct Node ) ); 30 if( S == NULL ) 31 FatalError( "Out of space!!!" ); 32 S->Next = NULL; 33 MakeEmpty( S ); 34 return S; 35 } 36 37 /* 使栈为空 */ 38 void 39 MakeEmpty( Stack S ) 40 { 41 if( S == NULL ) 42 Error( "Must use CreateStack first" ); 43 else 44 while( !IsEmpty( S ) ) 45 Pop( S ); 46 } 47 /* END */ 48 49 /* 释放栈 */ 50 void 51 DisposeStack( Stack S ) 52 { 53 MakeEmpty( S ); 54 free( S ); 55 } 56 57 /* START: fig3_42.txt */ 58 59 /* 入栈 */ 60 void 61 Push( ElementType X, Stack S ) 62 { 63 PtrToNode TmpCell; 64 65 TmpCell = malloc( sizeof( struct Node ) ); 66 if( TmpCell == NULL ) 67 FatalError( "Out of space!!!" ); 68 else 69 { 70 TmpCell->Element = X; 71 TmpCell->Next = S->Next; 72 S->Next = TmpCell; 73 } 74 } 75 /* 76 有头节点,栈顶是第一个节点,入栈是插到第一个节点前面,变成第一个节点 77 这样出栈方便 78 */ 79 80 /* END */ 81 82 /* START: fig3_43.txt */ 83 84 /* 返回栈顶元素 */ 85 ElementType 86 Top( Stack S ) 87 { 88 if( !IsEmpty( S ) ) 89 return S->Next->Element; 90 Error( "Empty stack" ); 91 return 0; /* Return value used to avoid warning */ 92 } 93 /* END */ 94 95 /* START: fig3_44.txt */ 96 97 /* 出栈 */ 98 void 99 Pop( Stack S )100 {101 PtrToNode FirstCell;102 103 if( IsEmpty( S ) )104 Error( "Empty stack" );105 else106 {107 FirstCell = S->Next;108 S->Next = S->Next->Next;109 free( FirstCell );110 }111 }112 /* END */

 

转载于:https://www.cnblogs.com/fazero/p/5017724.html

你可能感兴趣的文章
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
bzoj1230 开关灯 线段树
查看>>
LinearLayout
查看>>
学习python:day1
查看>>
css3动画属性
查看>>
第九次团队作业-测试报告与用户使用手册
查看>>
Equal Sides Of An Array
查看>>
CentOS笔记-用户和用户组管理
查看>>
Mongodb 基本命令
查看>>
Qt中QTableView中加入Check列实现
查看>>
“富豪相亲大会”究竟迷失了什么?
查看>>
控制文件的备份与恢复
查看>>
返回代码hdu 2054 A==B?
查看>>
Flink独立集群1
查看>>
iOS 8 地图
查看>>