#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. maven新建项目的几种方式和启动

    方式一: 第1步:转到 New 菜单 Other.. -> Maven -> Maven Project ,然后单击 Next .如下图所示 - 第2步:在New Maven Projec ...

  2. PLSQL 12 安装、连接Oracle

    点击下载PLSQL,本次安装的PLSQL版本为12.0.7,建议安装64位. 下载PLSQL时,版本旁边会有个“Language pack”的链接,点击后左侧选择“Chinese”即可下载汉化包. 注 ...

  3. DesignPattern系列__09设计模式概述

    设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案, 设计模(Design pattern)代表了最佳的实践.这些解决方案是众多软 ...

  4. 02Javascript变量和数据类型

    1. 变量概述 1.1 什么是变量 通俗:变量是用于存放数据的容器. 我们通过 变量名 获取数据,甚至数据可以修改. 1.2 变量在内存中的存储 本质:变量是程序在内存中申请的一块用来存放数据的空间. ...

  5. Toast实现源码解析

    说明 本篇文章用于介绍Android中Toast的实现原理.和简单实现一个自定义的Toast. Toast实现 一般常用Toast格式为: Toast.makeText(context,"t ...

  6. 网络流媒体协议之——RTSP协议

    RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层.RTSP以客户端方式工作,对流媒体提供播放.暂停.后退.前进等操作.该标准由IETF指 ...

  7. Windows文件夹共享和Unity的PersisterdataPath

    在共享机上存放unity开发的pc版本游戏,在其它机器双击就可以运行,但会遇到问题,比如: 游戏是需要下载资源的,默认情况下unity下载的资源是存放在persisterdataPath目录的,对于w ...

  8. Hyper-V与VirtualBox或VMware虚拟机软件冲突的解决方法(VirtualBox只能创建32位虚拟机)

    Hyper-V与VirtualBox或VMware虚拟机软件冲突的解决方法 Hyper-V是微软的虚拟化软件,功能类似VirtualBox.VMware,可以用来创建虚拟机. 虚拟化软件都是基于CPU ...

  9. jQuery中的事件(七)

    1. ready(fn), 当DOM载入就绪可以查询及操纵时绑定一个要执行的函数 这个方法纯粹是对向window.load事件注册事件的替代方法.通过使用这个方法,可以在DOM载入就绪能够读取并操纵时 ...

  10. es6 的类 class

    1.ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类. 2. //定义类 class Point { constructor(x, y ...