c_数据结构_栈的实现
#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_数据结构_栈的实现的更多相关文章
- C_数据结构_栈
# include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct Node ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_04 数据结构_1_数据结构_栈
2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类 的.好用吗?好用,这就是数据结构的用处,只不过你在不知不 ...
- C#数据结构_栈和队列
栈:先进后出,只能在栈顶进行操作. 栈的操作主要包括在栈顶插入元素和删除元素.取栈顶元素和判断栈是否为空等. 栈的接口定义: public interface IStack<T> { in ...
- c_数据结构_图_邻接表
课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...
- C_数据结构_链表的链式实现
传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...
- c_数据结构_队的实现
# 链式存储#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 #defin ...
- c_数据结构_链表
#include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 #define OVERFLOW -2 ty ...
- c_数据结构_顺序表
#define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define ...
- C_数据结构_走迷宫
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> ...
随机推荐
- 防火墙iptables的简单使用
规则定义 # service iptables start # chkconfig iptables on 想让规则生效,则shell命令行下执行 sh /bin/iptables.sh即可 [roo ...
- ASP.NET MVC5入门1之项目创建
本博文参考ASP.NET MVC5入门指南,下载链接: ASP.NET_MVC5_入门指南 1.创建项目 文件 --> 新建 --> 项目 Visual C# --> Web --& ...
- linux命令排序
sort -k1 -n 第一列按数字正排序 sort -K1 -rn 第一列按数字倒排序
- ios中input获取焦点时的问题
1.获取焦点时,input会变大 解决办法是:font-size设置为32px以上 还有就是要在header里面加这一行代码:<meta name="viewport" co ...
- html<meta>标签
1. 定义说明 <meta>提供与页面有关的元数据,元数据是对数据的描述 <meta>总是位于<head></head>中 <meta>定义 ...
- Confluence 6 PostgreSQL 创建数据库和数据库用户
一旦你成功的安装了 PostgreSQL 数据库: 创建一个数据库用户,例如 confluenceuser. 你的新用户必须能够 创建数据库对象(create database objects) 和 ...
- Pod 找不到头文件 解决方法
在 BuildSetting 中 搜索 User Header Search Paths 然后在下面 User Header Search Paths 中添加 ${SRCROOT} 再将后面参数改为 ...
- ES6之Set与Map加深理解
Set 类似于数组,但是成员的值都是唯一的,没有重复的值,有序. Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化. 用途 数组去重: [...new ...
- LeetCode(84): 柱状图中最大的矩形
Hard! 题目描述: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度 ...
- mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...