链栈

来源:互联网 发布:资金流水表设计 mysql 编辑:程序博客网 时间:2024/06/05 05:07
//该程序的功能为模拟链栈(还有顺序栈,是用数组实现的)#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct node{int date;struct node *pnext;}NODE,* PNODE;typedef struct stack{PNODE ptop;PNODE pbottom;}STACK,* PSTACK;//初始化栈void init(PSTACK);//出栈操作void push(PSTACK);//判断栈是否为空int isempty(PSTACK);//遍历栈void traverse(PSTACK);//出栈操作void pop(PSTACK);//清空栈void clear(PSTACK);void menu(PSTACK ps){int item;printf("\n********************************模拟链栈******************************\n");while(1){printf("\t\t1、入栈\n\t\t2、遍历栈\n\t\t3、出栈\n\t\t4、判断栈是否为空(无结果表示栈不空)\n\t\t5、清空栈\n\t\t6、清屏\n\t\t7、退出\n");printf("\t\t输入你的选择:\n");scanf("%d",&item);switch(item){case 1:push(ps);break;case 2:traverse(ps);break;case 3:pop(ps);break;case 4:isempty(ps);break;case 5:clear(ps);break;case 6:system("cls");break;case 7:exit(0);break;default:printf("输入有误重新输入:\n");break;}}}int main(){STACK s;init(&s);menu(&s);return 0;}//初始化栈,使得栈顶指针和栈底指针指向同一个节点,该节点的指针域为空void init(PSTACK ps){ps->ptop=ps->pbottom=(PNODE)malloc(sizeof(NODE));ps->ptop->pnext=NULL;}//判断栈是否为空(链栈不存在栈满的问题)int isempty(PSTACK ps){if(ps->ptop==ps->pbottom){printf("栈空!\n");return 1;}return 0;}//入栈操作void push(PSTACK ps){int i;PNODE p;p=(PNODE)malloc(sizeof(NODE));printf("输入入栈的数据(整形):\n");scanf("%d",&i);p->date=i;p->pnext=ps->ptop;ps->ptop=p;printf("入栈成功!\n");}//遍历栈void traverse(PSTACK ps){PNODE p=ps->ptop;while(p->pnext!=NULL){printf("\t%d",p->date);p=p->pnext;}printf("\n");}//出栈操作void pop(PSTACK ps){if(!isempty(ps)){PNODE p=ps->ptop;//释放栈顶节点时用ps->ptop=ps->ptop->pnext;free(p);printf("栈顶元素出栈成功!\n");}}//清空栈void clear(PSTACK ps){PNODE p;while(!isempty(ps)){p=ps->ptop;ps->ptop=ps->ptop->pnext;free(p);}}

原创粉丝点击