#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. cmdb项目-3

    1. cmdb资产审计 2.stark组件使用 快速完成网站的一个组件,使用方式与django的admin系统类似 ,仅仅将model注册 ,就可以生成对model增删改查的页面 ,当然这里还包括了模 ...

  2. [转]Outlook API

    本文转自:https://www.cnblogs.com/yl153/p/6711519.html 1.Outlook简介 若要从Outlook 外控制Outlook对象,必须在编写代码的工程中建立对 ...

  3. Web安全攻防笔记-SQL注入

    information_schema(MySQL5.0版本之后,MySQL数据库默认存放一个information_schema数据库) information_schema的三个表: SCHEMAT ...

  4. 【XML】利用Dom4j读取XML文档以及写入XML文档

    Dom4j简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能 ...

  5. [20191010]bash行计算器.txt

    [20191010]bash行计算器.txt --//写一个bash行计算器,为了避免冲突,函数命名为2个=,1个=感觉不是很好(心里上^_^).--//使用bc计算器,里面函数不能使用圆括号,使用中 ...

  6. 用Toad for Oracle创建数据库表空间和用户

    打开Toad, 1,菜单栏Session—>new Connection….打开如下窗口: 2,进入之后,菜单DatebaseàSechema  Brower...找到Table Space(表 ...

  7. thinkPHP中怎么访问域名直接跳到后台登录页面

    问题: 我想只访问域名就跳到后台登录页面,怎么把地址栏里的路径隐藏掉 答案: 修改配置Common里的conf文件夹里,把默认模块改成“Admin”,默认控制器改成“login”系统默认的默认模块式h ...

  8. 大数据安全利器ranger 编译安装

    ranger大数据领域的一个集中式安全管理框架,它可以对诸如hdfs.hive.kafka.storm等组件进行细粒度的权限控制.本文将介绍部署过程 1.  部署准备 ranger:    进入apa ...

  9. Git 常用命令:

    Git 常用命令: 1.git status #查看本地工作文件夹有哪些改动(和本地仓库对比),把差别列出. 2.git log #查看commit 的日志.(git log -2 只看最近2次的co ...

  10. Day_02

    1.无参数无返回值函数的使用 package main import "fmt" //无参无返回值函数的定义 func MyFunc() { a := 666 fmt.Printl ...