数据结构-链式栈的实现
来源:互联网 发布:轩辕剑神掌战力数据 编辑:程序博客网 时间:2024/05/17 04:57
转载自:http://blog.csdn.net/hopeyouknow/article/details/6725049
链式栈的实现:
头文件Stack.h
#ifndef Stack_H#define Stack_Htypedef int Item;typedef struct node * PNode;/*定义栈节点类型*/typedef struct node{Item data;PNode down;}Node;/*定义栈类型*/typedef struct stack{PNode top;int size;}Stack;/*构造一个空栈*/Stack *InitStack();/*销毁一个栈*/void DestroyStack(Stack *ps);/*把栈置空*/void ClearStack(Stack *ps);/*判定是否为空栈*/int IsEmpty(Stack *ps);/*返回栈大小*/int GetSize(Stack *ps);/*返回栈顶元素*/PNode GetTop(Stack *ps,Item *pitem);/*元素入栈*/PNode Push(Stack *ps,Item item);/*元素出栈*/PNode Pop(Stack *ps,Item *pitem);/*遍历栈并访问visit函数*/void StackTraverse(Stack *ps,void (*visit)());#endif
实现部分Stack.c
#include"Stack.h"#include<malloc.h>#include<stdlib.h>/*构造一个空栈*/Stack *InitStack(){Stack *ps = (Stack *)malloc(sizeof(Stack));if(ps!=NULL){ps->top = NULL;ps->size = 0;}return ps;}/*判定是否为空栈*/int IsEmpty(Stack *ps){if(ps->top == NULL && ps->size == 0)return 1;elsereturn 0;}/*返回栈大小*/int GetSize(Stack *ps){return ps->size;}/*元素入栈*/PNode Push(Stack *ps,Item item){PNode pnode = (PNode)malloc(sizeof(Node));if(pnode != NULL){pnode->data = item;pnode->down = GetTop(ps,NULL);ps->size++;ps->top = pnode;}return pnode;}/*返回栈顶元素*/PNode GetTop(Stack *ps,Item *pitem){if(IsEmpty(ps)!=1&&pitem!=NULL){*pitem = ps->top->data;}return ps->top;}/*元素出栈*/PNode Pop(Stack *ps,Item *pitem){PNode p = ps->top;if(IsEmpty(ps)!=1&&p!=NULL){if(pitem!=NULL)*pitem = p->data;ps->size--;ps->top = ps->top->down;free(p);}return ps->top;}/*销毁一个栈*/void DestroyStack(Stack *ps){if(IsEmpty(ps)!=1)ClearStack(ps);free(ps);}/*把栈置空*/void ClearStack(Stack *ps){while(IsEmpty(ps)!=1){Pop(ps,NULL);}}/*遍历栈并访问visit函数 */void StackTraverse(Stack *ps,void (*visit)()){PNode p = ps->top;int i = ps->size;while(i--){visit(p->data);p = p->down;}}
测试部分Test.c
#include"Stack.h"#include<stdio.h>void print(Item i){printf("该节点元素为%d\n",i);}main(){Stack *ps = InitStack();int i,item;printf("0-9依次入栈并输出如下:\n");for(i=0;i<10;i++){Push(ps,i);GetTop(ps,&item);printf("%d ",item);}printf("\n从栈顶到栈顶遍历并对每个元素执行print函数:\n");StackTraverse(ps,print);printf("栈中元素依次出栈并输出如下:\n");for(i=0;i<10;i++){Pop(ps,&item);printf("%d ",item);}ClearStack(ps);if(IsEmpty(ps))printf("\n将栈置空成功\n");DestroyStack(ps);printf("栈已被销毁\n");}
0 0
- 数据结构-链式栈的实现
- 数据结构---栈的链式实现
- 数据结构-->栈的链式实现
- 数据结构双语课->栈的链式实现
- 数据结构和算法--栈的链式实现
- 数据结构基础【06】栈的链式实现
- [数据结构]链式队列的实现。
- 数据结构-链式队列的实现
- 数据结构---队列的链式实现
- 数据结构 - 队列的链式实现
- 数据结构 链式 栈 c实现
- 数据结构c++实现----链式栈
- 数据结构栈(链式实现)
- [数据结构]栈之链式栈的类模板实现
- (C语言)栈的链式实现(数据结构九)
- 数据结构:栈的链式实现(C语言描述)
- JAVA版数据结构之栈的链式存储实现
- 数据结构与算法设计---链式栈的实现(C++)
- Xcode5提交代码到github
- 正确建立ado组件说明
- C/C++计时函数汇总
- [EXCEL]单元格高效操作
- 如何使用KeyChain保存和获取UDID
- 数据结构-链式栈的实现
- html富文本两次转码后解决方案
- poj 1321 棋盘问题(类似于N皇后问题)
- WebSocketClient
- [Android]Volley源码分析(叁)Network
- Reference > mongo Shell Methods > Collection Methods > db.collection.mapReduce()
- freediameter部分源码分析
- freemarker学习(一)
- Telerik移动应用开发工具AppBuilder学习笔记(一)