链式栈C++实现
2016-03-11 16:24
344 查看
<span style="font-size:18px;">#include <iostream> #include<stdio.h> #include<malloc.h> #include<stdlib.h> using namespace std; typedef struct Node{ int data; struct Node *pNext; }NODE,*PNODE; typedef struct Stack{ PNODE pTop; PNODE pBottom; }STACK,*PSTACK; //函数声明 void initStack(PSTACK); void push(PSTACK,int); void traverse(PSTACK); bool pop(PSTACK,int *); void clearStack(PSTACK); bool empt(PSTACK); int main(){ STACK s;//STACK等价于struct Stack initStack(&s); push(&s,1); push(&s,2); push(&s,3); push(&s,4); push(&s,5); push(&s,6); int val; traverse(&s); //出栈 bool b = pop(&s,&val); if(b){ //遍历输出 printf("出栈成功,出栈元素="); printf("%d\n",val); traverse(&s); }else{ printf("出栈失败\n"); } clearStack(&s); printf("清空栈\n"); traverse(&s); printf("进栈\n"); push(&s,1); push(&s,2); push(&s,3); traverse(&s); return 0; } //将栈清空 void clearStack(PSTACK pStack){ if(empt(pStack)){ return ; }else{ while(pStack->pBottom!=pStack->pTop){ PNODE p = pStack->pTop; pStack->pTop =p->pNext; free(p); p=NULL; } } } //用来判断栈是否为空 bool empt(PSTACK pStack){ if(pStack->pTop==pStack->pBottom){ return true; }else{ return false; } } //用来弹栈,这个val将出栈的元素保存 bool pop(PSTACK pStack,int * val){ if(empt(pStack)){ return false; }else{ PNODE p = pStack->pTop; pStack->pTop=p->pNext; *val =p->data; free(p); p=NULL; return true; } } //用来遍历栈 void traverse(PSTACK pStack){ PNODE p = pStack->pTop; while(p!=pStack->pBottom){ printf("%d\n",p->data); p=p->pNext; } } //用来压栈 void push(PSTACK pStack,int value){ PNODE p = (PNODE)malloc(sizeof(NODE)); if(NULL==p){ printf("压栈失败\n"); exit(-1); }else{ p->data=value; p->pNext=pStack->pTop;//pStack->pTop不能随便改成pStack->pBottom pStack->pTop=p; } } //用来初始化栈 void initStack(PSTACK pStack){ PNODE p = (PNODE)malloc(sizeof(NODE)); if(NULL==p){ printf("动态内存分配失败\n"); exit(-1); }else{ pStack->pBottom=p; pStack->pTop=p; pStack->pTop->pNext=NULL; } } </span>
相关文章推荐
- 链表C++实现
- 静态循环队列C++实现
- C语言关于多进程的总结
- 汉诺塔C++实现
- 标准c++中string类函数介绍
- 《你必须知道的495个C语言问题》读书笔记之第1-2章:声明和初始化
- C++第一上机实验-1-3
- ACM--括号匹配C++实现
- 快速排序递归算法
- 10 进制数转化成10以内任意进制数
- 机试题螺旋矩阵C++实现
- 研究具有静态存储时期的变量的初始化时间
- 在C/C++代码中使用SSE等指令集的指令(5)SSE进行加法运算简单的性能测试
- 在C/C++代码中使用SSE等指令集的指令(4)SSE指令集Intrinsic函数使用
- [C++]IDictionary的用法
- 在C/C++代码中使用SSE等指令集的指令(2)参考手册
- 在C/C++代码中使用SSE等指令集的指令(1)介绍
- 在C/C++代码中使用SSE等指令集的指令(3)SSE指令集基础
- 用C++面向对象的方式动态加载so
- 关于C++中的虚拟继承的一些总结