栈(三):链式栈
来源:互联网 发布:实时数据监控 编辑:程序博客网 时间:2024/06/06 00:13
- 链式栈的存储结构
typedef int datatype;typedef struct link_node{datatype info;struct link_node *next;//指向下一个结点的link_node指针}node;
- 基本运算实现
node *init();//建立一个空的链式栈int empty(node *top);//判断链式栈是否为空datatype read(node *top);//读链式栈的栈顶结点值void display(node *top);//输出链式栈中各个结点的值node *push(node *top, datatype x);//向链式栈插入值为x的结点(进栈)node *pop(node* top);// 删除链式栈的栈顶结点(出栈)
具体函数实现#include "lnkstack.h"#include <stdio.h>#include <stdlib.h>/************************************************************************//* 函数功能: 建立一个空的链式栈 *//* 函数参数: 无*//* 函数返回值: 指向node类型变量的指针 *//* 文件名: lnkstack.c ,函数名: init()*//************************************************************************/node *init(){return NULL;}/************************************************************************//* 函数功能: 判断链式栈是否为空 *//* 函数参数: 指向node类型变量的指针top*//* 函数返回值: int类型的变量,1为空,0为非空*//* 文件名:lnkstack.c ,函数名:empty() *//************************************************************************/int empty(node *top){return (top?1:0);}/************************************************************************//* 函数功能: 读链式栈的栈顶结点值 *//* 函数参数: 指向node类型变量的指针top *//* 函数返回值: datatype类型的变量 *//* 文件名: lnkstack.c,函数名: read()*//************************************************************************/datatype read(node *top){if (!top)//链式栈是空的{printf("\n链式栈是空的!");exit(1);}return (top->info);}/************************************************************************//* 函数功能: 输出链式栈中各个结点的值 *//* 函数参数: 指向node类型变量的指针top*//* 函数返回值: 空 *//* 文件名: lnkstack.c ,函数名:display() *//************************************************************************/void display(node *top){node *p;p=top;if (!p){printf("\n链式栈是空的!");}else{puts("链式栈中的元素为:");}while (p){printf("%5d",p->info);p=p->next;}printf("\n");}/************************************************************************//* 函数功能: 向链式栈插入值为x的结点(进栈) *//* 函数参数: 指向node类型变量的指针top ,datatpye类型变量x*//* 函数返回值: 指向node类型变量的指针 *//* 文件名:lnkstack.c ,函数名: push()*//************************************************************************/node *push(node *top, datatype x){node *p;p=(node*)malloc(sizeof(node));p->info=x;p->next=top;top=p;return top;}/************************************************************************//* 函数功能: 删除链式栈的栈顶结点(出栈) *//* 函数参数: 指向node类型变量的指针top*//* 函数返回值: 指向node类型变量的指针 *//* 文件名: lnkstack.c ,函数名: pop()*//************************************************************************/node *pop(node* top){node *q;if (!top){printf("\n链式栈是空的!");return NULL;}q=top;top=top->next;free(q);return top;}
- main函数
#include <stdio.h>#include <stdlib.h>#include "lnkstack.h"void main(void){node *p_lnkstack;//初始化链栈p_lnkstack = init();int choosecase = 0;int x;puts("进栈请输入0,出栈请输入1");while((scanf("%d", &choosecase)) == 1){switch (choosecase){case 0:puts("输入进栈元素x");scanf("%d", &x);p_lnkstack = push(p_lnkstack, x);display(p_lnkstack);break;case 1:printf("出栈的元素为%d\n",read(p_lnkstack));p_lnkstack = pop(p_lnkstack);display(p_lnkstack);break;default:break;}puts("进栈请输入0,出栈请输入1");}system("pause");}
- 运行结果
0 0
- 栈(三):链式栈
- 数据结构(三)——双链表、链式栈、链式队列 及实现
- 栈(链式)
- 栈(链式)
- LinkList_Stack(链式栈)
- 链式栈
- 链式栈
- 链式栈
- 链式栈
- 链式栈
- 链式栈
- 链式栈
- 栈链式
- 链式栈
- 链式栈
- 链式栈
- 链式栈
- 栈-链式
- 百度之星初赛(1) 1003 序列变换 二分搜索
- Java多态性 父类引用指向子类对象
- 【学习拾遗】Jquery(二)--插件
- Android监听ScrollView滑动到顶端和底部
- leetcode ZigZag Conversion
- 栈(三):链式栈
- 走进算法
- 部分A+B
- 剑指offer--两个栈生成队列
- android ScrollView滚动距离和判断滚动停止状态
- 文章标题
- Python2.7-异常和工具
- 实现医生工作站中处方录入功能的代码(六)
- xmu 1074: 安全网络 ver.1(MST模型)