#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. GO基础之函数

    一.Go语言函数的格式 函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func.函数名.参数列表.返回值.函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块. 函 ...

  2. 聚焦性能技术和实践, MTSC全面揭秘PerfDog演进之路

    商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 12月14日,2019年度中国移动互联网测试开发大会(Mobile Testing Summit China,简称 MTSC)深圳站于深 ...

  3. WebSocket实现Java后台消息推送

    1.什么是WebSocket WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端. 2.实现原理 在实现 ...

  4. 【jQuery】jQuery基础

    jQuery介绍 jQuery是一个轻量级JS库,使用十分简单: jQuery的核心是选择器,用于获取页面元素: jQuery提供了大量高效的方法,开发速度大幅提升: jQuery选择器 jQuery ...

  5. haproxy动静分离的验证

    线上出现过项目的静态文件被拦截,不能直接访问.所以想到了haproxy指向对应的url来访问静态文件,想到这里在网络搜索了下,确实有此功能.立即上测试环境验证下: 在listen中增加两行: ​ #定 ...

  6. hi3559v100 sdk中双系统AMP架构的初步了解

    hi3559v100是海思推出的camera soc处理器.采用的是双核处理器.一个是a7,运行的linux3.18内核.一个是a17使用的是huaweiliteos操作系统,Hi3559V100 系 ...

  7. 30.Java基础_接口_抽象类_具体类实现案例

    public interface SpeakEnglish { public abstract void speak(); } public abstract class Person { priva ...

  8. SpringCloud学习笔记(五、SpringCloud Netflix Hystrix)

    目录: Hystrix简介 线程隔离:线程池.信号量 服务降级.服务熔断.请求缓存.请求合并 Hystrix完整流程.Hystrix属性值 注解方式实现Hystrix Hystrix Dashboar ...

  9. 201871010116-祁英红《面向对象程序设计(java)》第四周学习总结

    博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...

  10. WinSxS目录下文件的清除

    1)McAfee Scanner service 持续高cpu 2)上网查到了,需要看 %deflogdir%目录下的OnDemandScan_Activity.log 3) 打开这个文件,发觉一直在 ...