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

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

1 /*  2   编译器:Dev-c++ 5.4.0   3   文件名:linkStack.cpp   4   代码版本号:1.0  5   时间:2015年10月15日18:56:06  6   7 */  8 #include 
9 #include
10 #define ERROR 0 11 #define OK 1 12 #define FALSE 0 13 #define TRUE 1 14 #define OVERFLOW -2 15 16 typedef int sElemType; 17 typedef int Status; 18 typedef struct lNode{ 19 sElemType data; 20 struct lNode *next; 21 }lNode,*linkStack; 22 23 24 /*初始化空栈*/ 25 Status initStack(linkStack *s){ 26 *s=(linkStack)malloc(sizeof(lNode)); 27 if(!(*s)) 28 exit(OVERFLOW); 29 (*s)->next=NULL; 30 return OK; 31 } 32 33 /*销毁栈*/ 34 Status destroyStack(linkStack *s){ 35 lNode *p=(*s)->next; 36 lNode *q; 37 if(!p){ 38 return OK; 39 } 40 while(p){ 41 q=p; 42 p=p->next; 43 free(q); 44 } 45 return OK; 46 } 47 48 /*把S栈置为空栈*/ 49 Status clearStack(linkStack *s){ 50 (*s)->next=NULL; 51 return OK; 52 } 53 54 /*判断栈是否为空栈*/ 55 bool emptyStack(linkStack *s){ 56 if((*s)->next) 57 return FALSE; 58 else 59 return TRUE; 60 } 61 62 int stackLength(linkStack *s){ 63 int len=0; 64 *s=(*s)->next; 65 while(*s){ 66 *s=(*s)->next; 67 len++; 68 } 69 return len; 70 } 71 /*入栈*/ 72 Status push(linkStack *s,sElemType e){ 73 lNode *p=(*s); 74 while(p->next){ 75 p=p->next; 76 } 77 p->next=(linkStack)malloc(sizeof(lNode)); 78 p->next->data=e; 79 p->next->next=NULL; 80 return OK; 81 } 82 83 /*出栈*/ 84 Status pop(linkStack *s,sElemType *e){ 85 lNode *p=(*s); 86 lNode *q; 87 while(p->next){ 88 q=p; 89 p=p->next; 90 } 91 q->next=NULL; 92 *e=p->data; 93 free(p); 94 return OK; 95 } 96 97 /*得到栈顶元素*/ 98 Status getTop(linkStack *s,sElemType *e){ 99 lNode *p=(*s);100 if(!p->next){101 printf("栈为空,无法得到栈顶元素\n");102 return ERROR; 103 }104 105 while(p->next){106 p=p->next;107 }108 *e=p->data;109 return OK;110 } 111 112 int visit(sElemType c){113 printf("%d ",c);114 return 1;115 }116 /*遍历栈*/117 Status stackTraverse(linkStack *s,int (*visit)(sElemType)){118 linkStack p=(*s)->next; 119 while(p){120 visit(p->data);121 p=p->next;122 }123 return OK;124 }125 126 int main(){127 linkStack S;128 initStack(&S);129 sElemType e;130 for(e=1;e<=5;e++)131 push(&S,e); 132 printf("\n遍历前:");133 stackTraverse(&S,visit);134 int i;135 for(i=1;i<=1;i++)136 pop(&S,&e);137 printf("\n弹出%d个元素后:",i-1);138 stackTraverse(&S,visit);139 getTop(&S,&e);140 printf("\n栈顶元素为:%d",e);141 clearStack(&S);142 if(emptyStack(&S))143 printf("\n栈变为空栈了"); 144 system("pause");145 return 0;146 }

 

转载于:https://www.cnblogs.com/gangtiexia/p/4883384.html

你可能感兴趣的文章
hexo个人博客添加宠物/鼠标点击效果/博客管理
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
关于WPF的2000件事 02--WPF界面是如何渲染的?
查看>>
单元测试、、、
查看>>
SVN使用教程总结
查看>>
JS 浏览器对象
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
虚拟中没有eth0
查看>>
Unity 3D游戏开发学习路线(方法篇)
查看>>
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
合并单元格
查看>>
swift-初探webView与JS交互
查看>>
IOS-图片操作集合
查看>>
Android bitmap图片处理
查看>>
Android应用程序进程启动过程的源代码分析
查看>>
adb logcat 命令行用法
查看>>