数据结构初学————栈的基本操作
2014-07-24 15:18
148 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node { int data; struct Node *pNext; }NODE, *PNODE; typedef struct Stack { PNODE pTop; PNODE pBottom; }STACK, *PSTACK; // PSTACK 等价于 struct Stack * void init(PSTACK); void push(PSTACK, int); void traverse(PSTACK); bool pop(PSTACK, int *); void clear(PSTACK pS); int main(void) { STACK S;//STACK 等价于 struct Stack; int val; init( &S);//目的是造出一个空栈 push(&S, 1);//压栈 push(&S, 2); push(&S, 3); push(&S, 4); push(&S, 5); push(&S, 6); traverse(&S); //遍历输出 if( pop(&S, &val) )//出栈 { printf("出栈成功,出栈的元素是%d\n ", val); } else { printf("出栈失败!\n"); } traverse(&S); clear(&S); traverse(&S); if( pop(&S, &val) )//出栈 { printf("出栈成功,出栈的元素是%d\n ", val); } else { printf("出栈失败!\n"); } 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->pTop->pNext = NULL; //pS->pBottom->pNext = NULL; } return; } void push(PSTACK pS, int val) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = val; pNew->pNext = pS->pTop; //pS.Top 不能改成pS.pBottom; pS->pTop = pNew; return; } void traverse(PSTACK pS) { PNODE p = pS->pTop; while(p != pS->pBottom) { printf("%d ", p->data); p = p->pNext; } printf("\n"); return; } bool empty(PSTACK pS) { if(pS->pBottom == pS->pTop) return true; else return false; } //把pS所指向的栈出栈一次,并把出栈的元素存入 pVal形参所指向的变量中 。如果出栈失败,返回 false,否则返回true。 bool pop(PSTACK pS, int *pVal) { if(empty(pS))//pS本身存放的就是S的地址 { return false; } else { PNODE r = pS->pTop; *pVal = r->data; pS->pTop = r->pNext; free(r); r = NULL; return true; } } //clear清空 void clear(PSTACK pS) { if(empty(pS)) { return; } else { PNODE p = pS->pTop; PNODE q = NULL; while(pS ->pBottom != p) { q = p ->pNext; free(p); p = q; } pS ->pTop = pS->pBottom; } }
相关文章推荐
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- bo2-31.cpp 一个数组只生成一个静态链表(数据结构由c2-3.h定义)的基本操作(11个))
- 【数据结构】二叉树基本操作的程序实现
- 数据结构 链队列基本操作
- 数据结构基本操作(复制而来)
- 一步一步复习数据结构和算法基础-图的创建和基本操作(邻接矩阵)
- 数据结构:字符串的堆分配存储结构,基本操作实现和测试。
- 数据结构:链表的基本操作
- 重学数据结构(一):链表基本操作与一元多项式相加
- 重学数据结构004——栈的基本操作及实现(数组实现)
- [C++]数据结构:有序链表SortedChain的基本实现与操作
- bo2-32.cpp 一个数组可生成若干静态链表(数据结构由c2-3.h定义)的基本操作(12个)
- 新手学习数据结构与算法---单链表的基本操作
- 【转】数据结构链表操作之双链表的基本操作
- 数据结构 顺序栈基本操作
- 重学数据结构003——栈的基本操作及实现(链式存储)
- 数据结构类型定义及基本操作汇总(三)--图的表示
- 数据结构类型定义及基本操作汇总(二)-- 二叉树及其遍历
- 重学数据结构001――链表基本操作与一元多项式相加
- 一步一步复习数据结构和算法基础-二叉树基本操作