#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10 //stackincrement
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct{
int *base;
int *top;
int stacksize; }SqStack; //构建空栈
int InitStack(SqStack &S){
S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S.base)exit(OVERFLOW);
S.top=S.base; //构建空栈
S.stacksize=STACK_INIT_SIZE;
printf("\n空栈创建成功!!\n\n");
return OK;
} //插入元素为栈顶元素 int Push(SqStack &S,int e){
//插入数据为依次插入
printf("\n请输入插入的数据:");
scanf("%d",&e);
if(S.top-S.base>S.stacksize){
S.base=(int *)realloc(S.base,S.stacksize+STACKINCREMENT*sizeof(int));//栈满 ,加空间
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;//存入数据
printf("\n数据插入成功!!");
return OK;
}
//删除栈顶元素
int Pop(SqStack &S,int &e){
//删除元素为最后一个数
if(S.top==S.base){
printf("\n栈为空!!无法继续删除!!");
return ERROR;
}
e=*--S.top;
printf("\n删除的元素为:%d",e);
printf("\n\n删除成功!!");
return OK;
}
// 判断是否为空栈
int StackEmpty(SqStack S){
if(S.top==S.base) return OK;
else return ERROR; } //获取栈顶元素
int GetTop(SqStack S,int &e){
if(S.top==S.base) {
printf("栈为空!!");
return ERROR;
}
e=*(S.top-);
printf("\n存储的栈顶元素为:%d",e);
return OK;
} //查找元素
/*
int GetElem_Sk(SqStack &S,int i,int &e){
printf("请输入查找元素的位置:");
scanf("%d",&i); if(i<1||i>(S.top-S.base)){
printf("元素不在栈空间内!!");
return ERROR;
}
e=*(S.base++);
printf("查找的元素为:%d",e);
return OK;
}
*/
//创建栈,并可存入数据
int creatlist(SqStack &S){
int i,n;
printf("请用户存入数据\n\n请选择存入数据个数:");
scanf("%d",&n);
while(n<=){
printf("\n存入个数小于了“1”,请重新存入:");
scanf("%d",&n);
}
/* if(n>(S.top-S.base)){
printf("-----------");
S.base=(int *)realloc(S.base,S.stacksize+STACKINCREMENT*sizeof(int));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}*/
printf("\n请输入%d个数据:\n\n",n); for(i=;i<=n;i++){
printf("请输入第%d个元素(请回车结束):",i);
++S.top;
scanf("%d",S.top-);
}
printf("\n存入数据成功!!\n");
return OK;
} //清空栈
int clear(SqStack &S){
S.top=S.base;
printf("栈清空成功!!\n");
// creatlist(S);
return OK;
}
//打印栈中元素
int pr(SqStack S){
if(S.top==S.base){
printf("\n\n栈为空!!");
return ERROR;
}
int *p;
p = S.top;
printf("栈中元素有:\n");
while(p>S.base) {
p--;
printf("\n%d",*p);
}
return OK;
}
//操作菜单
void OperateMenu(){ printf("\n\n--------------请选择元素处理方式---------\n\n");
printf("注:此程序为栈的实现,故只能对序列尾进行元素的插入和删除\n\n");
printf("0> 退出\n\n");
printf("1>: 栈尾插入元素\n\n");
printf("2>: 删除栈尾元素\n\n");
printf("3>: 打印元素\n\n");
printf("4>: 获取栈顶元素(存入的最后一个元素)\n\n");
printf("5>: 清空原栈\n\n");
printf("6>:批量输入\n\n");
printf("请选择对元素的处理:");
}
void main(){
int w=,k,boo=,e=;
SqStack S;
printf("注:此测试过程输入值应全为数字\n\n");
printf("请用户选择创建栈或退出程序:\n\n");
printf("创建栈请输入:'1'\n\n");
printf("退出请选择'0'或 其它!!\n\n");
printf("请选择:");
scanf("%d",&w);
if(w==){
InitStack(S);
// creatlist(S);
OperateMenu();
scanf("%d",&k);
while(k){
switch(k){
case :break;
case :Push(S,e);
break;
case :Pop(S,e);
break;
case :boo=pr(S);
if(boo)
printf("\n\n打印成功!!");
else
printf("打印失败!!");
break;
case :boo=GetTop(S,e);
if(boo)
printf("\n\n获取成功!!");
else
printf("获取失败!!");
break;
case :clear(S);
break;
case :creatlist(S);break; }
OperateMenu();
scanf("%d",&k);
} } }

c_数据结构_栈的实现的更多相关文章

  1. C_数据结构_栈

    # include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct Node ...

  2. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_04 数据结构_1_数据结构_栈

    2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类 的.好用吗?好用,这就是数据结构的用处,只不过你在不知不 ...

  3. C#数据结构_栈和队列

    栈:先进后出,只能在栈顶进行操作. 栈的操作主要包括在栈顶插入元素和删除元素.取栈顶元素和判断栈是否为空等. 栈的接口定义: public interface IStack<T> { in ...

  4. c_数据结构_图_邻接表

    课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...

  5. C_数据结构_链表的链式实现

    传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...

  6. c_数据结构_队的实现

    # 链式存储#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 #defin ...

  7. c_数据结构_链表

    #include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 #define OVERFLOW -2 ty ...

  8. c_数据结构_顺序表

    #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define ...

  9. C_数据结构_走迷宫

    #include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> ...

随机推荐

  1. codeforces411div.2

    每日CF: 411div2 Solved A CodeForces 805A Fake NP Solved B CodeForces 805B 3-palindrome Solved C CodeFo ...

  2. 009_关闭linux的THP

    背景:公司某个大型业务系统反馈最近数据库服务器总是宕机(此处描述不准确,后面解释),最后,客户.运维人员都觉得实在是忍无可忍了,项目经理打电话找到我问是否能帮忙诊断一下,刚好第二天要去现场沟通另外一个 ...

  3. FTP登录提示Can't open data connection for transfer of "/"

    服务器: 系统:windows server 2008 R2 standard 是否开启防火墙:是 FTP客户端:Filezilla server 本地: FTP服务端:winscp 使用winscp ...

  4. 响应式页面-@media介绍

    01 响应式页面-@media介绍,   我们为什么要写自适应的页面(响应式页面) 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话 ...

  5. linux指定只显示(只打印)文件中的某几行(中间几行)

    [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 [二]显示1000行到3000行 cat ...

  6. 分析Vue框架源码心得

    1.在封装一个公用组件,比如button按钮,我们多个地方使用,不同类型的button调用不同的方法,我们就可以这样用 代码片段: <lin-button v-for="(item,i ...

  7. Confluence 6 布局高级自定义

    重载 Velocity 模板 velocity 目录是 Confluence Velocity 模板文件进行搜索时候需要的文件夹.例如,你可以通过将你的 Velocity 文件使用正确的文件名放置到正 ...

  8. cordova AndroidStudio3.0 升级报错问题

    http://blog.csdn.net/z_Xiaozuo/article/details/78962701 ionic3 打包 安卓项目遇到的问题,当时比较冲忙升级了下android studio ...

  9. laravel 实现一个简单的 RESTful API

    创建一个 Article 资源 php artisan make:resource Article 你可以在 app/Http/Resources 目录下看到你刚刚生成的 Article 资源 当然我 ...

  10. 基于Web的漏洞利用

    1.Nikto 基于Web的漏洞信息扫描 nikto 自动扫描web服务器上没有打补丁的软件,同时同时也检测驻留在服务器上的危险文件,nikto能够识别出特定的问题,检测服务器的配置问题, 检测某台主 ...