栈的表示和实现
来源:互联网 发布:win10 安装ubuntu 分区 编辑:程序博客网 时间:2024/05/30 07:14
#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct Node{ int data; struct Node *pNext;}NODE, * PNODE; //定义指针节点 typedef struct Stack{ PNODE pTop; PNODE pBottom;}STACK,* PSTACK; //定义带有栈顶指针和栈低指针的节点 void init(PSTACK pS);void push(PSTACK ,int);bool pop(PSTACK,int *);void traverse(PSTACK);bool empty(PSTACK);void clear(PSTACK);int main(void){ STACK s; int val; init (&s); //创建空栈 push(&s,1); push(&s,2); push(&s,3); push(&s,4); push(&s,5); traverse(&s);//遍历输出 //clear(&s); //清空栈 if(pop(&s,&val)) { printf("出栈成功,出栈的元素是:%3d\n",val); } else printf("出栈失败!\n"); printf("\n栈内剩余的元素有:"); traverse(&s); return 0;}void init(PSTACK pS){ pS->pTop=(PNODE)malloc(sizeof(NODE)); if(NULL==pS->pTop) { printf("动态内存分配失败!\n"); exit(-1); } else { pS->pBottom=pS->pTop; pS->pBottom->pNext=NULL; }}void push(PSTACK pS,int val ){ PNODE pNew=(PNODE)malloc(sizeof(NODE)); pNew->data=val; pNew->pNext=pS->pTop; pS->pTop=pNew; return;}void traverse(PSTACK pS){ PNODE p=pS->pTop; while(p!=pS->pBottom) { printf("%3d ", p->data); p=p->pNext; } return;}bool empty(PSTACK pS){ if(pS->pTop==pS->pBottom) { return true; } else return false;}bool pop(PSTACK pS,int *pVal){ if(empty(pS)) { return false; } else { PNODE r=pS->pTop; *pVal=r->data; pS->pTop=r->pNext; free(r); pS=NULL; return true; }}void clear(PSTACK pS){ if(empty(pS)) { return; } else { PNODE p=pS->pTop; PNODE q=NULL; while(p!=pS->pBottom) { q=p->pNext; free(p); p=q; } pS->pTop=pS->pBottom; }}
1 0
- 栈的表示和实现
- 栈的表示和实现
- 栈的表示和实现
- 数据结构4:栈的表示和实现
- 顺序栈的表示和实现
- 顺序栈的表示和实现
- 链式栈的表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现(数据结构)
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的链式表示和实现
- 栈的顺序表示和实现
- 顺序栈的表示和实现
- 链栈的表示和实现
- 顺序栈的表示和实现
- 2016.3.31 蘑菇街笔试编程题2
- 中兴移动2014届校园招聘C++笔试题
- iOS --- 获取屏幕顶层的UIViewController
- ViewPager+app新手引导页
- EM算法与混合高斯模型
- 栈的表示和实现
- Android简易指南针
- 整数的补码表示及其运算分析
- UE4 技巧总结
- mysql 8小时问题
- Android动画四:View的animate方法 (ViewPropertyAnimator)
- iOS使用代理模式从后往前传值
- 数据结构与算法——求最大子矩阵问题
- Leetcode之Basic Calculator & Basic Calculator II