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> ...
随机推荐
- oracle 12514文件解决
listener.ora的SID_LIST_LISTENER添加一下内容 (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = f:\app\Admini ...
- 【笔记】[WIN7x64] ThinkPad E420开机不能按设置关闭触控板的问题
将win7x32重装为Win7x64后,TouchPad(以下简称TP)就不能在开机时按照在控制面板-鼠标中的设置关闭TP, 从而每次开机都必须去点开控制面板->鼠标 才能关闭TP.因为通常不用 ...
- 快速解决PHP调用Word组件DCOM权限的问题
1. 首先必须要在电脑上安装 Office 2. windows+r : 输入 dcomcnfg.exe 打开组件服务,然后双击 组件服务 ==> 双击 计算机 ==> 双击 我的电脑 = ...
- HDU 4455
题意 : 题目 给你一个序列 , 查询 t ,问 序列 连续 长度为 t 的子区间 的不同数 的和 巧妙的动态规划 数据大, Dp可以 O(n) #include<iostream> # ...
- Laravel 5.2--如何让表单提交错误,不清空?
控制器 public function store(Request $request) { $validator = Validator::make($request->all(), [ 'Su ...
- 【原创】大数据基础之Flume(2)应用之kafka-kudu
应用一:kafka数据同步到kudu 1 准备kafka topic # bin/kafka-topics.sh --zookeeper $zk:2181/kafka -create --topic ...
- django.db.utils.OperationalError: (1049, "Unknown database 'djangodb'")
DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME': 'mysql', 'USER':'root', 'PAS ...
- VUE 图片验证码
1. 概述 1.1 说明 在开发过程中,有时候需要使用图片验证码进行增加安全强度,在点击图片时更新新的图片验证码,记录此功能,以便后期使用. 2. 示例 2.1 vue示例代码 <templat ...
- python-re模块和subprocess模块
一.re模块 re中文为正则表达式,是字符串处理的常用工具,通常用来检索和替换符合某个模式的文本. 注:要搜索的模式和字符串都可以是unicode字符串(str)和8位字符串(bytes),但是不能将 ...
- easyui的combobox,自动搜索的下拉框
作者:多来哈米 如图,输入关键字,左匹配检索 HTML代码 <input class="easyui-combobox" name="userId" id ...