对栈的各种操作的实现(C语言)
来源:互联网 发布:java时间格式化DD 编辑:程序博客网 时间:2024/05/01 07:52
对栈的各种操作的实现
#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 initStack(PSTACK);//初始化栈 void pushStack(PSTACK,int);//压栈 void traverse(PSTACK);//遍历栈 bool pop(PSTACK,int *);//出栈 bool is_empty(PSTACK);//判断栈是否为空 void clear(PSTACK pS);//清空栈 int main(){STACK S;int val;initStack(&S);//造出一个空栈 pushStack(&S,1);//压栈 pushStack(&S,2);pushStack(&S,5);pushStack(&S,8);pushStack(&S,0);traverse(&S);//clear(&S);//traverse(&S);if(pop(&S,&val)){printf("出栈成功!出栈的元素是%d\n",val);}else{printf("出栈失败!");}traverse(&S);//遍历输出 return 0;} void initStack(PSTACK pS){pS->pTop=(PNODE)malloc(sizeof(NODE));if(NULL==pS->pTop){printf("动态内存分配失败!\n");exit(-1);}else{ pS->pBottom=pS->pTop; pS->pTop->pNext=NULL;} }void pushStack(PSTACK pS,int val){PNODE pNew=(PNODE)malloc(sizeof(NODE));if(NULL==pNew){printf("动态内存分配失败!\n");exit(-1);}else{pNew->data=val; pNew->pNext=pS->pTop; pS->pTop=pNew;}return;}void traverse(PSTACK pS){PNODE p=pS->pTop;while(pS->pBottom!=p){printf("%d ",p->data);p=p->pNext; }printf("\n");return;}//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中。如果出栈失败,返回false,否则返回true bool pop(PSTACK pS,int *pVal){ if(is_empty(pS)) { return false; }else { *pVal=pS->pTop->data; PNODE q=pS->pTop; pS->pTop=pS->pTop->pNext; free(q); q=NULL; return true; }}bool is_empty(PSTACK pS){if(pS->pBottom==pS->pTop){return true;}else{return false;}}void clear(PSTACK pS){if(is_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;}}
0 0
- 对栈的各种操作的实现(C语言)
- 对链表各种操作的实现(C语言)
- 对队列各种操作的实现(C语言)
- C语言实现单链表的各种操作
- 单链表各种操作的C语言实现(二)
- 单链表各种操作的C语言实现(一)
- C语言实现对文本文件的操作
- 用C语言实现单链表的各种操作
- 单循环链表各种操作的C语言实现
- C语言通过位实现对数字的操作
- 二叉树的各种操作总汇(c/c++语言实现)
- java实现对文件的各种操作
- java实现对文件的各种操作
- 实现Java对Excel的各种操作
- c语言单链表的各种操作<未完>
- (C语言)自拟顺序表的各种操作
- 各种排序方法的C语言实现
- 各种排序的C语言实现
- jQuery、JS调用iframe父窗口与子窗口元素的方法
- Netty教程-ServerBootstrap
- 使用Xposed拦截应用通知的一直简单实现
- IIS8.5,在调用RSA加密时报错的解决方法
- iOS原生与H5交互开发
- 对栈的各种操作的实现(C语言)
- Path路径
- C/C++创建和删除文件夹操作
- iBET Lucky Draw gives Adidas YEEZY 350 V2(Adidas YEEZY 350 V2, casino promotion, iBET, iBET Online C
- virtualbox下osx系统盘扩容方法
- 实时操作系统概念
- Ubuntu下gcc安装及使用
- oracle sql语言模糊查询--通配符like的使用教程
- volatile与synchronized 同步原理基础讲解