用指针实现链栈的方法
2013-10-09 18:24
253 查看
在算法中要用到多个栈时,最好用链表作为栈的存储结构,即用指针来实现。
#include<stdio.h> #include<stdlib.h> //******************************* //定义节点的结构体 typedef struct snode *slink; typedef struct snode { int element; slink next; }StackNode; //***************************** //定义栈的结构体 typedef struct Istack *Stack; typedef struct Istack { slink top; //指向节点的栈顶指针 }Lstack; //******************************** //动态分配一个结点,如果内存不足,则分配失败 slink NewStackNode() { slink p; if((p=(slink)malloc(sizeof(StackNode)))==0) { printf("Exhausted memory."); exit(0); } else return p; } //********************************** //栈的初始化 Stack StackInit() { Stack p; p=(Stack)malloc(sizeof(Istack)); p->top=0; return p; } //********************************* //判断栈是否为空 int StackEmpty(Stack S) { return S->top==0; } //********************************* //为栈试分配一个新结点,检测栈空间是否为满 int StackMemFull() { slink p; if((p=(slink)malloc(sizeof(StackNode)))==0) //已满,返回1 return 1; else { free(p);return 0; } } int StackFull(Stack S) { return StackMemFull(); //栈满返回1,否则返回0 } //********************************* //取栈顶元素 int StackTop(Stack S) { if(StackEmpty(S)) { printf("Stack is empty"); exit(0); } else return S->top->element; } //********************************** //新元素进栈 void Push(int x,Stack S) { slink p; if(StackFull(S)) { printf("Stack is full"); exit(0); } p=NewStackNode(); p->element=x; p->next=S->top; S->top=p; } //********************************** //删除栈顶元素 int Pop(Stack S) { slink p; int x; if(StackEmpty(S)) { printf("Stack is empty"); exit(0); } x=S->top->element ; p=S->top; S->top = p ->next; free(p); return x; } //******************************** int main() { Stack S; S=StackInit(); printf("进栈元素:\n"); for(int i=1;i<=10;i++) { Push(i,S); printf("%d ",i); } printf("\n出栈元素:\n"); for( i=1;i<=10;i++) printf("%d ",Pop(S)); return 0; }
相关文章推荐
- poj3252 Round Numbers
- 用红黑树实现500万数据的动态排序
- 编程名言名句
- 软件生存周期模型
- cron的初探
- zabbix调优
- cocos2d-x 一个plist创建多个帧动画
- JavaFX 3D部分介绍(3) Lights
- 返璞归真
- jquery显示或隐藏元素
- poj 3608 Bridge Across Islands
- js题
- 让zabbix图像中文不再是乱码
- ipvsadm命令参考
- Android 解决黑屏时wifi断开连接的问题
- 红孩儿工具箱-Honghaier Game Tool
- Flex4之元数据标签使用
- 黑马程序员-console.writeline,不定长参数以及params
- /var/spool/postfix/maildrop目录特别大
- Java常用集合比较