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> ...
随机推荐
- bootstrap简单使用布局、栅格系统、modal标签页等常用组件入门
<!DOCTYPE html> <html> <head> <title>bootstrap</title> <!-- 引入boots ...
- mysql 5.6 windows 启动脚本
2018-4-25 17:02:08 星期三 下载mysql 5.6 zip(免安装版)到本机 一台电脑上可能装有多个版本的mysql, 启动时为了不影响: 1. 解压后文件夹根目录改名为 mysql ...
- 通信——基于Xmpp协议实现的聊天室
前段时间写了个自定义通信协议的聊天室(即用\r\n标记字符串,作为一句话),总感觉自己弄的那个协议实现虽然简单,但是拓展性就太差了,只适合于发送聊天的内容,难以包含更多的信息.基于上述几点,于是就开始 ...
- Android apk互调
1.启动另外一个应用程序的主Activity. //这些代码是启动另外的一个应用程序的主Activity,当然也可以启动任意一个Activity ComponentName componetName ...
- Js操作Array数组
之前写过一篇文章,但是很模糊,不过却给我提供了一个思路,所以没有删除,这次写的是一个完善版本! 因为在很多的时候我们在选中了几行数据,然后存放在Array中,如下图: 看下控制台的数据 我双击了这两个 ...
- Codeforces 1045G AI robots [CDQ分治]
洛谷 Codeforces 简单的CDQ分治题. 由于对话要求互相看见,无法简单地用树套树切掉,考虑CDQ分治. 按视野从大到小排序,这样只要右边能看见左边就可以保证互相看见. 发现\(K\)固定,那 ...
- Swift 给UITableView 写extension 时 报错 does not conform to protocol 'UITableViewDataSource'
那是因为你没有实现 数据源和代理方法 实现下就好了 func tableView(_ tableView: UITableView, numberOfRowsInSection section: In ...
- js获取到的页面中的checkbox选中的项
需求描述:列表第一列是checkbox name和value都是id 想通过复选框的勾选状态来获取id,在js中获取 js代码: var checkId=$("input[name='che ...
- 【python】python为何多线程无法切换
写了一个kafka传输消息,celery发布任务的脚本. 有四个线程,分别读取不同的kafka队列信息 问题是,只有第一个线程会启动,剩下的三个线程连start都运行不了. 而且这个问题不是一开始就发 ...
- poj3254 炮兵阵地弱化版,记数类dp
/* dp[i][j]表示到第i行的状态j有多少放置方式 */ #include<iostream> #include<cstring> #include<cstdio& ...