欢迎来到天天文库
浏览记录
ID:51687213
大小:40.95 KB
页数:5页
时间:2020-03-15
《c语言创建堆栈压栈出栈遍历栈清空栈.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、//创建堆栈,压栈,出栈,遍历栈,清空栈2012.7.20#include#include#includevoidinit_stack(structstack*ps);//初始化voidpush(structstack*ps);//压栈voidpop(structstack*ps);//出栈voidclear_stack(structstack*ps);//清空栈voidoutput_stack(structstack*ps);//显示栈的内容intis
2、_empty(structstack*ps);//判断是否为空栈//结构体structnode{charno[20];charname[20];structnode*pnext;};//结构体structstack{structnode*top;structnode*bottom;};//主函数intmain(void){inti;structstacks;printf("开始初始化..........");init_stack(&s);printf("初始化成功!");printf("开始压栈!"
3、);for(i=0;i<2;i++){push(&s);}printf("压栈完成!");printf("显示栈!");output_stack(&s);printf("开始出栈!");pop(&s);printf("显示栈!");output_stack(&s);printf("清空栈!");clear_stack(&s);printf("显示栈!");output_stack(&s);return0;}//初始化,建立一个空的栈voidinit_stack(structstack*p
4、s){ps->top=(structnode*)malloc(sizeof(structnode));if(ps->top==NULL){printf("内存分配失败!");exit(-1);}else{ps->bottom=ps->top;(ps->top)->pnext=NULL;}return;}//压栈,链表原理voidpush(structstack*ps){structnode*p;p=(structnode*)malloc(sizeof(structnode));if(p==NULL){pri
5、ntf("内存分配失败!");exit(-1);}else{printf("请压入学号:");scanf("%s",p->no);printf("请压入姓名:");scanf("%s",p->name);p->pnext=ps->top;ps->top=p;printf("压入成功!");}return;}//出栈链表原理voidpop(structstack*ps){structnode*p;if(is_empty(ps)){printf("栈是空的,没数据可出!");return;}else{p
6、=ps->top;ps->top=p->pnext;free(p);}return;}//清空栈里的内容voidclear_stack(structstack*ps){structnode*p,*q;if(is_empty(ps)){printf("栈是空的,不能再清除!");return;}else{p=ps->top;//定义两个指针变量,同时指向栈顶q=p;while(q->pnext!=NULL){q=p->pnext;//指向栈顶下一个节点free(p);//删除栈顶p=q;//同时指向新栈顶}p
7、s->top=p;//指向栈顶}return;}//判断堆栈是否为空intis_empty(structstack*ps){if(ps->top==ps->bottom)return1;elsereturn0;}//显示栈里的内容voidoutput_stack(structstack*ps){structnode*p;if(is_empty(ps)){printf("栈是空的,无数据可显示!");return;}else{p=ps->top;while(p->pnext!=NULL){printf("学号
8、:%s姓名:%s",p->no,p->name);p=p->pnext;}}return;}
此文档下载收益归作者所有