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> ...
随机推荐
- STM32F1-GPIO的操作
GPIO 即通用输入输出口.凡事都要熟悉,熟能生巧.一定要掌握MDK软件的工程操作方法. 对于GPIO的操作. Project里面要有以下几个文件夹(开发之前需要包含相应的库文件,这里默认已经包含) ...
- 关于在Fragment中设置toolbar及菜单的方法
在NoActionBar的主题中onCreateOptionsMenu方法不会运行,这里就需要将toolbar强制转换为ActionBar 在加入toolbar的监听之类后需要在onCreateVie ...
- jenkins每次构建前删除工作目录操作
背景: 想在拉取代码前,删除代码,结果百度白天找到答案,mark下 需要安装Workspace Cleanup Plugin插件, 再看创建任务项,勾选即可实现
- 06 元祖 字典 集合set
元组 定义: ti=() print(ti,type(ti)) 参数:for可以循环的对象(可迭代对象) t2=tuple(") # ('1', '2', '3') <class 't ...
- python第一天,编写用户接口
作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 流程图: 代码 #!/usr/bin/env python #-*- coding:utf-8 -*- #created b ...
- PID控制器开发笔记之三:抗积分饱和PID控制器的实现
积分作用的引入是为了消除系统的静差,提高控制精度.但是如果一个系统总是存在统一个方向的偏差,就可能无限累加而进而饱和,极大影响系统性能.抗积分饱和就是用以解决这一问题的方法之一.这一节我们就来实现抗积 ...
- 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载
<疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...
- Confluence 6 用自带的用户管理
在一些特定的情况下,你可能希望禁用 Confluence 自带的用户管理或完全使用外部的用户目录进行用户管理.例如 Jira 软件或者 Jira Service Desk.你可以在 Confluenc ...
- 树形dp 入门
今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没 ...
- java多线程机制中的Thread和Runnable()区别
1.java语言使用Thread类及其子类对象来表示线程,新建的一个线程声明周期中经历 新建.(声明一个线程,此时他已经有了相应的内存空间和其他资源),运行(线程创建之久就据用了运行的条件,一旦轮到使 ...