#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 typedef int SElemType; typedef struct {
SElemType *base;
SElemType *top;
int stackSize;
}SqStack; SqStack *InitStack(SqStack *S);//初始化
SqStack *DestroyStack(SqStack*S);//销毁
void ClearStack(SqStack*S);//清空
int StackEmpty(SqStack*S);//判空
int StackLength(SqStack*S);//栈长度
SElemType GetTop(SqStack*S);//获取栈顶元素,不修改指针位置
int Push(SqStack*S, SElemType e);//插入栈顶
int Pop(SqStack *S, SElemType *e);//删除栈顶
void StackTraverse(SqStack *S);//从栈顶依次遍历 //初始化,返回指向栈的指针
SqStack * InitStack(SqStack *S){
S = (SqStack *)malloc(sizeof(SqStack));
S->base = (SElemType *)malloc(sizeof(SElemType)*MAXSIZE);
if(!S->base){
printf("空间不足初始化失败\n");
return NULL;
}
S->top = S->base;
S->stackSize = MAXSIZE;
printf("初始化成功\n");
return S;
} //销毁
SqStack *DestroyStack(SqStack*S){
free(S->base);
free(S);
printf("已销毁\n");
return NULL;
} //清空
void ClearStack(SqStack*S){
printf("清空\n");
SElemType *p = S->top;
while(p >= S->base){
*p--=;
}
printf("清空成功\n");
} //判空
int StackEmpty(SqStack*S){
return (S->base == S->top);
} //返回栈长度
int StackLength(SqStack*S){
return S->top-S->base;
} //获取栈顶元素,不修改指针位置
SElemType GetTop(SqStack*S){
if(S->top != S->base)
return *(S->top - );
} //插入栈顶,返回是否插入成功的状态
int Push(SqStack*S, SElemType e){
if(S->top - S->base == S->stackSize){
printf("栈已满,插入失败\n");
return ;
}
//先赋值后动指针
*S->top++=e;
printf("%d元素入栈成功\n", e);
return ;
} //删除栈顶,返回是否删除成功的状态
int Pop(SqStack *S, SElemType *e){
//栈空
if(S->top == S->base){
printf("空栈,删除失败\n");
return ;
}
//先动指针后赋值
*e = *--S->top;
printf("%d出栈成功\n", *e);
return ;
} //从栈顶依次遍历
void StackTraverse(SqStack *S){
SElemType *p = S->top;
while(p > S->base){
p--;
printf("%d ", *p);
}
printf("\n");
} int main()
{
SqStack *S = NULL;
SElemType e; //初始化测试
S = InitStack(S); // //判空测试
// if(StackEmpty(S)) printf("空栈\n");
//
//插入测试
Push(S, );
Push(S, );
Push(S, );
Push(S, );
Push(S, ); // //遍历测试
// StackTraverse(S);
//
// //出栈测试
// Pop(S, &e);
//// printf("测试e是否改变:%d\n",e);
// StackTraverse(S);
//
// //栈长测试
// printf("栈长%d\n",StackLength(S));
//
// //获取栈顶元素测试
// e = GetTop(S);
// printf("栈顶元素是%d\n", e);
// StackTraverse(S);
//
// //清空测试
// ClearStack(S);
// if(StackEmpty(S)) printf("空栈\n");
// StackTraverse(S); //销毁测试
S = DestroyStack(S);
StackTraverse(S); return ;
}

纯C语言实现顺序栈的更多相关文章

  1. C语言实现顺序栈

    C语言实现顺序栈,顺便加深刻++i,++i的区别 #include <stdio.h>#include <stdlib.h>#define maxsize 100/*写在前面的 ...

  2. C++语言实现顺序栈

    C++语言实现顺序栈 在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以去我的博客看看.在这篇博 ...

  3. C语言实现顺序栈以及栈的特点

    什么是栈? 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如下图所示. 从上图我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 ...

  4. C语言实现顺序栈的初始化&进栈&出栈&读取栈顶元素

    /*顺序表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define Stack_Size 50 //设栈中元素个数为50 ...

  5. 数据结构(C语言版)顺序栈相关算法的代码实现

    这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...

  6. 纯C语言实现链栈

    #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct StackNode{ E ...

  7. 纯C语言实现顺序队列

    #include <stdio.h> #include <stdlib.h> #define MAXSIZE 6 typedef int QElemType; typedef ...

  8. 顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  9. 数据结构与算法之顺序栈C语言实现

    顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...

随机推荐

  1. Jquery补充及插件

    此篇为jQuery补充的一些知识点,详细资料请看另一篇博客,地址:https://www.cnblogs.com/chenyanbin/p/10454503.html 一.jQuery中提供的两个函数 ...

  2. SpringBoot(六) SpringBoot整合Swagger2(自动化生成接口文档)

    一:在上篇文章pom增加依赖: <dependency> <groupId>io.springfox</groupId> <artifactId>spr ...

  3. Docker关于镜像、容器的基本命令

    镜像 1.获取镜像 docker pull 服务器:端口/仓库名称:镜像 ➜ ~ docker pull python Using default tag: latest 2.查看镜像信息 列出本机所 ...

  4. Windows下Python3.7的安装

    1.下载Python3官网地址:www.python.org当前最新版本为Python 3.7.3. Windows下有个6个下载链接Windows x86-64 embeddable zip fil ...

  5. 实时数据推送webSocket

    实时数据推送 在Web或移动项目中,服务器向客户端实时推送消息是一种常见的业务需求. 实现方式 Polling:轮询(俗称“拉”),即定期重新请求数据. Long-Polling:长轮询,是 Poll ...

  6. [20190523]修改参数后一些细节注意.txt

    [20190523]修改参数后一些细节注意.txt --//昨天远程给别人解决一个小问题,就是配置使用hugepage.一些细节必须注意,通过例子说明问题. 1.环境:# cat /proc/vers ...

  7. apicloud如何实现优雅的下拉刷新与加载更多

    apicloud中提供下拉刷新监听事件api,也提供滚动到底部事件的监听,能够实现下拉刷新和滚动到底部加载更多功能,但是我们真的就满足实现功能了吗?将两个代码拼凑起来运行看看发现了什么?是的,在滚动到 ...

  8. CodeForces - 1255C(构造+模拟)

    题意 https://vjudge.net/problem/CodeForces-1255C 一个长度为n的序列,给你n-2个三元组,比如p=[1,4,2,3,5],那么三元组为[1,4,2],[4, ...

  9. python+requests+re匹配抓取猫眼上映电影信息

    python+requests抓取猫眼中上映电影,re正则匹配获取对应电影的排名,图片地址,片名,主演及上映时间和评分 import requests import re, json def get_ ...

  10. 初学JavaScript正则表达式(一)

    给单个单词is改为大写的IS \bis\b // \b指的是单词边界 IS He is a boy This is a test isn't it 给以http://开头并且以jpg结尾的链接删除掉h ...