栈的基本操作(链表)
来源:互联网 发布:java运行class文件原理 编辑:程序博客网 时间:2024/06/16 07:37
菜鸟制作......
head.h
#define OK 1#define ERROR 0#define STACKINITSIZE 100#define STACKADD 10typedef int SElemType;typedef int Status;typedef struct Node{SElemType data;Node *next;}SNode;typedef struct{SNode *head;SNode *rear;}SqStack;void show();Status InitStack(SqStack &S);Status DestroyStack(SqStack &S);Status ClearStack(SqStack &S);Status StackEmpty(SqStack &S);int StackLength(SqStack S);Status GetTop(SqStack &S,SElemType &e);Status Push(SqStack &S,SElemType e);Status Pop(SqStack &S,SElemType &e);
function.cpp
#include"head.h"#include<iostream>using namespace std;void show(){cout<<"1.初始化栈!"<<endl;cout<<"2.销毁栈!"<<endl;cout<<"3.清空栈!"<<endl;cout<<"4.栈是否为空!"<<endl;cout<<"5.栈长!"<<endl;cout<<"6.取栈顶!"<<endl;cout<<"7.压栈!"<<endl;cout<<"8.出栈!"<<endl;}Status InitStack(SqStack &S){S.head=(SNode*)malloc(sizeof(SNode));S.rear=S.head;return OK;}Status DestroyStack(SqStack &S){ClearStack(S);free(S.head);S.head=S.rear=NULL;return OK;}Status ClearStack(SqStack &S){if(S.head==NULL)return ERROR;SElemType e; while(Pop(S,e)) {} return OK;}Status StackEmpty(SqStack &S){if(S.head==NULL)return ERROR;if(S.head==S.rear)return OK;return ERROR;}int StackLength(SqStack S){if(S.head==NULL)return ERROR;int i=0;SNode *p=S.head;while(p!=S.rear){i++;p=p->next;}return i;}Status GetTop(SqStack &S,SElemType &e){if(S.head==NULL)return ERROR;if(S.head==S.rear)return ERROR;e=S.head->next->data;return OK;}Status Push(SqStack &S,SElemType e){if(S.head==NULL)return ERROR;SNode *p=(SNode*)malloc(sizeof(SNode));p->data=e;p->next=S.head->next;S.head->next=p;if(S.head==S.rear)S.rear=p;return OK;}Status Pop(SqStack &S,SElemType &e){if(S.head==NULL)return ERROR;if(S.head==S.rear)return ERROR;SNode *p=S.head->next;e=p->data;S.head->next=p->next;free(p);if(p==S.rear)S.rear=S.head;return OK;}
main.cpp
#include"head.h"#include<iostream>using namespace std;void main(){SqStack S;int n;SElemType e;while(1){show();cin>>n;switch(n){case 1:{if(!InitStack(S))cout<<"初始化失败!"<<endl;elsecout<<"初始化成功!"<<endl;break; }case 2:{if(!DestroyStack(S))cout<<"销毁失败!"<<endl;elsecout<<"销毁成功!"<<endl;break; }case 3:{ if(!ClearStack(S))cout<<"清空失败!"<<endl;elsecout<<"清空成功!"<<endl;break; }case 4:{if(S.head==NULL)cout<<"栈不存在!"<<endl;if(StackEmpty(S))cout<<"栈为空!"<<endl;elsecout<<"栈不为空!"<<endl;break;}case 5:{ if(!StackLength(S)) cout<<"栈不存在!"<<endl; else cout<<"栈长为:"<< StackLength(S)<<endl; break; }case 6:{if(!GetTop(S,e))cout<<"获取失败!"<<endl;elsecout<<"栈顶为:"<<e<<endl;break;}case 7:{cout<<"请输入要压入的数据:"<<endl;cin>>e;if(!Push(S,e))cout<<"压入失败!"<<endl;elsecout<<"压入成功!"<<endl;break; }case 8:{ if(!Pop(S,e)) cout<<"出栈失败!"<<endl; else cout<<"出栈成功!出栈的数据为:"<<e<<endl; break; }default:{cout<<"输入有误!请重新输入:"<<endl;break;}}}}
0 0
- 栈的基本操作(链表)
- 栈的基本操作(数组/链表)
- 栈的基本操作
- 栈的基本操作
- 栈 的基本操作。
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- 栈的基本操作
- Libev源码分析02:Libev中的IO监视器
- HIHO Drinking Game
- UML之用例图
- 二叉树中序遍历的三种方法
- 【软考7】算法基础知识
- 栈的基本操作(链表)
- LinuxCNC+EtherCAT(7)一个歪果仁做的例子的解释。。。。。
- PHP微信开发---简单的文本自动回复
- Android之浮动小窗口
- 2、常见的Web应用攻击
- Codeforces 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest J题(BFS)
- android悬浮窗口的实现
- Codevs P1155 金明的预算方案
- LeetCodeOJ_206_Reverse Linked List