数据结构----顺序栈
来源:互联网 发布:我家网络连着异界 编辑:程序博客网 时间:2024/06/11 16:33
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>using namespace std;#define LL long long#define M(a,b) memset(a,b,sizeof(a))typedef struct{ int *base;///栈底 int *top;///栈顶 int stacksize;} Sqstack;int Initsatck( Sqstack &S) ///建立空栈{ S.base = (int *)malloc(100*sizeof(int)); ///申请空间 if(!S.base)///申请空间失败 { return -1; } S.top = S.base; S.stacksize = 100;///栈的初始大小为100 return 1;}int Destroystack(Sqstack &S)///销毁栈{ S.top = NULL; S.stacksize = 0; free(S.base); return 1;}int clearstack(Sqstack &S)///请空栈{ S.top=S.base; return 1;}int Stackempty(Sqstack &S)///判断栈是否为空{ if(S.top == S.base) { return -1; } else { return 1; }}int Stacklen(Sqstack &S)///获得栈的长度{ if(S.top == S.base) { return 0; } else { return (S.top - S.base); }}int Gettop(Sqstack &S)///获得栈顶元素{ int e; if(S.top ==S.base) { return -1; } else { e=*(S.top-1); } return e;}int Push(Sqstack &S,int &e)///元素e入栈{ if(S.top - S.base >=100)///空间不足 { S.base = (int*)realloc(S.base,(S.stacksize + 10)*sizeof(int)); if(!S.base) { return -1; } S.top = S.base +100; S.stacksize +=10; } *S.top = e;///如栈操作 S.top++; return 1;}int Pop(Sqstack &S, int &e)///栈顶元素出栈,并用e返回其值{ if(S.top == S.base) { return -1; } else { S.top--; e=*S.top; return e; }}int Stacktraverse(Sqstack &S)///遍历输出该栈元素{ if(S.base == NULL) { return -1; } int *p; p = S.base; while(p<S.top) { printf("%d ",*p); p++; } printf("\n"); return 1;}int main(){ int n; int num[1005]; int num2[1005]; Sqstack S; Initsatck(S); if(Stackempty(S)) { printf("此栈为空\n\n\n"); } printf("请输入栈中的元素个数\n"); while(~scanf("%d",&n)) { printf("请输入栈内元素:\n"); for(int i=0; i<n; i++) { scanf("%d",&num[i]); Push(S,num[i]); } int del,e2; printf("请输入想插入的元素的值以及位置\n"); scanf("%d %d",&del,&e2); for(int i=0; i<n-del+1; i++) { num2[i]=Pop(S,num2[i]); } Push(S,e2); Stacktraverse(S); for(int i=n-del; i>=0; i--) { Push(S,num2[i]); } printf("插入后栈内的元素为\n"); Stacktraverse(S); printf("请输入删除元素的位置:\n"); int del2; scanf("%d",del2); M(num2,0); for(int i=0; i<n-del+2; i++) { num2[i]=Pop(S,num2[i]); } printf("所删除的元素是:"); printf("%d\n",num2[n-del-1]); for(int i=n-del; i>=0; i--) { Push(S,num2[i]); } printf("删除该元素后栈里元素为:\n"); Stacktraverse(S); } return 0;}
运行图 :
阅读全文
0 0
- 数据结构(栈):顺序栈
- 数据结构之顺序栈
- 数据结构 顺序栈
- 数据结构,栈,顺序表示
- 【数据结构】顺序栈 Stack
- 数据结构《顺序栈》
- 数据结构----顺序栈
- 数据结构之顺序栈
- 数据结构-顺序栈
- 【数据结构】顺序栈_Stack
- 数据结构之顺序栈
- 【数据结构】·【顺序栈】
- 数据结构_顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- python自动化测试应用-第10篇-python调用安卓adb命令(上篇)
- hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息
- OpenStack不影响业务的情况下,动态减少巨页内存
- iOS开发 解决Xcode9的Log日志无法输出中文的问题
- 动态设置view或布局的宽高
- 数据结构----顺序栈
- Spring boot 快速搭建
- 《解忧程序员》
- Hyperledger Fabric SDK 示例fabric-samples-《balance-transfer》之八《查询指定的区块信息》
- 深入理解uwsgi和gunicorn网络模型
- web项目中对properties文件的加密
- ALAssetLibrary压缩视频以及PHoto框架压缩视频
- 【MongoDB】非验证连接和验证连接
- 《JAVA与模式》之抽象工厂模式