栈(三):链式栈

来源:互联网 发布:实时数据监控 编辑:程序博客网 时间: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
原创粉丝点击