#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. zookeeper权限问题

    对cdrwa的说明如上,网上一些博客乱写误导 参考链接:http://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html 这是在使用zk ...

  2. linux无法启动httpd服务问题

    httpd 服务启动报错,可能出现的问题比较多,通过查看日志看是什么报错 (tail  200f /etc/httpd/logs/error_log) 1.查看防火墙是不是关闭状态 2.查看80端口是 ...

  3. Linux Free命令每个数字的含义 和 cache 、buffer的区别

    Linux Free命令每个数字的含义 和 cache .buffer的区别 我们按照图中来一细细研读(数字编号和图对应)1,total:物理内存实际总量2,used:这块千万注意,这里可不是实际已经 ...

  4. Day7--------------IP地址配置

    ifconfig 查看网卡 ifconfig eth0 查看网卡eth0 配置网络地址: 临时配置: ifconfig eth0 192.168.10.100 netmask 255.255.255. ...

  5. 分布式系统的一致性协议之 2PC 和 3PC

    在分布式系统领域,有一个理论,对于分布式系统的设计影响非常大,那就是 CAP 理论,即对于一个分布式系统而言,它是无法同时满足 Consistency(强一致性).Availability(可用性) ...

  6. GDOI2018 涛涛摘苹果 [CDQ分治]

    传送门我会让你知道哪里有题面吗(逃 思路 显然不能模拟苹果下掉的过程,考虑计算每个苹果对询问的贡献. 显然一开始就有的苹果可以看做第0天变出来的,于是只需要考虑变出来的苹果了. 设当前询问节点\(x\ ...

  7. vi快速查找

    用vim时,想高亮显示一个单词并查找的方发,将光标移动到所找单词. 1: shift + "*"  向下查找并高亮显示 2: shift + "#"  向上查找 ...

  8. Function types cannot have argument labels 错误解决方案

    今天在封装网络工具类的时候 报错了 经过分析发现是在Swift3.0 把闭包的入参的参数名去掉就好了 正确写法 completion: @escaping (Any?, Bool)->() 错误 ...

  9. 移动端点击出现阴影 css解决方案

    a,img,button,input,textarea,div{-webkit-tap-highlight-color:rgba(255,255,255,0);}

  10. android 使用opencv

    1.将已有的项目名称改名字,但一直报错 Error:A problem occurred configuring project ':app'.> executing external nati ...