栈的定义与操作
来源:互联网 发布:五彩斑斓的黑色 知乎 编辑:程序博客网 时间:2024/05/22 02:04
看代码理解。。
/************************************************************************* > File Name: stack.c > Author: Netcan > Mail: 1469709759@qq.com > Created Time: 2014/12/21 9:39:37 ************************************************************************/#include<stdio.h>#include<malloc.h>struct Node { // 定义节点int data;Node * pNext;};struct Stack { // 定义栈Node *pTop; // 栈顶指针Node *pBottom; // 栈底指针};void init_Stack(Stack *S); // 初始化栈void traverse_Stack(Stack *S); // 遍历栈bool push_Stack(Stack *S,int val); // 压栈bool pop_Stack(Stack *S); // 出栈void clear_Stack(Stack *S); // 清空栈int main() {Stack S; // 声明一个栈init_Stack(&S); // 初始化push_Stack(&S,0); // 压栈测试push_Stack(&S,1);push_Stack(&S,2);push_Stack(&S,3);push_Stack(&S,4);push_Stack(&S,5);push_Stack(&S,6);push_Stack(&S,7);push_Stack(&S,8);push_Stack(&S,9);traverse_Stack(&S); // 遍历pop_Stack(&S); // 出栈测试pop_Stack(&S); traverse_Stack(&S);clear_Stack(&S); // 清空栈测试traverse_Stack(&S);return 0;}void init_Stack(Stack *S) {S->pBottom = (Node *)malloc(sizeof(Node)); // 分配一个新结点给栈顶和栈底S->pTop = S->pBottom;S->pBottom->pNext = NULL; // 栈底的不指向其他节点return;}void traverse_Stack(Stack *S) {Node * p = S->pTop; // 遍历用的指针while( p != S->pBottom ){ // 如果没遍历到栈底printf("%3d",p->data);p = p->pNext; }puts("");}bool push_Stack(Stack *S,int val) {Node *pNew = (Node*)malloc(sizeof(Node)); // 分配一个新节点if( pNew == NULL ) // 如果分配失败return false;pNew->data = val; // 节点赋值pNew->pNext = S->pTop; // 使新节点成为栈顶 S->pTop = pNew;return true;}bool pop_Stack(Stack *S) {if(S->pTop == S->pBottom) // 如果栈为空则不必出栈return false;Node *p = S->pTop; // 使p指向栈顶,为了释放栈顶节点S->pTop = p->pNext; // 栈顶下移free(p); // 释放p = NULL;}void clear_Stack(Stack *S){//while( pop_Stack(S)); 其实可以这样写。。。一直出栈直到栈为空Node * p = S->pTop; // p一直指向栈顶while( S->pTop != S->pBottom ) { // 如果栈顶还没到栈底就继续释放S->pTop = p->pNext; // 栈顶下移free(p); //释放p = S->pTop;}}
运行图:
0 0
- 栈的定义与操作
- 函数指针的定义与操作示例
- python的二维数组定义与操作
- string对象的定义与操作
- 链表的定义与简单操作
- 链式队列的定义与操作
- 环形队列的定义与操作
- C++语言文件的定义与操作
- 顺序表的定义与操作实现
- 集合的定义与查并操作
- 顺序表的定义与操作
- 链表的定义与操作
- 数据结构-5 堆的定义与操作
- 二叉树的定义与基本操作
- 串定义与操作
- 顺序线性表的定义与基本操作
- mysql 存储过程中变量的定义与赋值操作
- mysql 存储过程中变量的定义与赋值操作
- Quick cocos2dx-Lua(V3.3R1)学习笔记(4)------创建精灵 菜单,让我们做个最简单的点击菜单显示精灵吧
- c#快捷键大全o
- 统计思路
- Kubernetes印象(by quqi99)
- 写给已有编程经验的 Python 初学者的总结
- 栈的定义与操作
- java IO流
- Linux网络协议栈(一)——Socket入门(1)
- 虚函数的作用
- JS replace函数的用法
- 比较C#与C++、Java的异同
- centos 安装mysql时错误unknown variable 'defaults-file=/opt/redmine-2.6.0-2/mysql/my.cnf'
- 利用Envi Idl和MRT 对MODIS影像批量转投影
- 数据库中两张表之间的数据同步增加、删除