实验3_2 实现链栈各种基本运算的算法
2018-02-01 16:47
405 查看
/*现在构造链栈的各种基本运算的方法 Time:2018-2-1; Author:ZouJiXiang; school:imnu */ #include<stdio.h> #include<malloc.h> typedef char ElemType; typedef struct linknode{ ElemType data; struct linknode* next; }LiStack; void InitStack(LiStack * & s){ s=(LiStack*)malloc(sizeof(LiStack)); //动态分配存储空间; s->next=NULL; } void DestroyStack(LiStack*& s) { //毁灭栈; LiStack *p=s,*q=s->next; while(q!=NULL) { free(p); p=q; q=p->next; } free(p); } void Push(LiStack*& s,ElemType e) { LiStack *p; p=(LiStack*)malloc(sizeof(LiStack)); //动态分配; p->data=e; p->next=s->next; //进栈的关键操作,采用头插法,最后面进来的结点放在最前面(也就是s->next,因为s头结点不存信息); s->next=p; } bool Pop(LiStack*& s,ElemType& e){ //栈的原则满足后进先出; LiStack * p; if(s->next==NULL){ return false; } p=s->next; //头结点的下一个节点; e=p->data; s->next=p->next; free(p); //本质也就是将S->next节点给删掉了; return true; } bool StackEmpty(LiStack* s){ if(s->next==NULL) return true; else return false; } ElemType Gettop(LiStack* s) //将栈顶元素返回出来;注意此处不用加&,因为栈s不会改变。 { LiStack * p; p=s->next; return p->data; } int main() { LiStack* s; //定义一个类型为LiStack* 名字为s; ElemType e; InitStack(s); //这是关键,千万别忘了; Push(s,'a'); Push(s,'b'); Push(s,'c'); Push(s,'d'); printf("输出栈顶元素:\n"); printf("%c\n",Gettop(s)); while(!StackEmpty(s)) { Pop(s,e); printf("%c ",e); } printf("\n"); //printf("输出栈顶元素:\n"); //printf("%c\n",Gettop(s)); //不能放在这里,是因为此处栈中的元素已经全部都出去了; }
相关文章推荐
- 数据结构第三章实验2.实现链栈的各种基本运算
- 实现链栈各种基本运算的算法
- 实现二叉树各种基本运算的算法
- 实现顺序栈的各种基本运算的算法
- 实现顺序队列各种基本运算的算法
- 编写一个程序,实现链栈的各种基本运算
- 实现环形队列各种基本运算的算法(用顺序结构)
- 实现顺序表各种基本运算的算法
- 实现顺序队列各种基本运算的算法
- 数据结构第五版第二章实验2.实现单链表的各种基本运算
- 实现顺序栈的各种基本运算的算法
- 实现链栈各种基本运算
- 实现顺序串各种基本运算的算法
- 实现二叉树的各种基本运算的算法
- 实现循环单链表各种基本运算的算法
- !实现链串各种基本运算的算法
- 实现单链表各种基本运算的算法
- 实现双链表的各种基本运算的算法
- !实现循环双链表各种基本运算的算法
- 实现二叉树各种基本运算的算法