- 链式栈的存储结构
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"); }
- 运行结果