/*
编译器:Dev-c++ 5.4.0
文件名:stack.cpp
代码版本号:1.0
时间:2015-10-10 20:08:54 */
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
#define FALSE 0
#define TRUE 1
#define OVERFLOW -2
#define INIT_STACK_SIZE 100
#define STACK_INCREMENT 10 typedef int sElemType;
typedef int Status;
typedef struct {
sElemType *base;
sElemType *top;
int stackSize;
}sqStack; /*初始化INIT_STACK_SIZE大小的空栈*/
Status initStack(sqStack *s){
s->stackSize=INIT_STACK_SIZE;
s->base=s->top=(sElemType *)malloc(INIT_STACK_SIZE*sizeof(sElemType));
return OK;
} /*销毁栈*/
Status destroyStack(sqStack *s){
free(s->base);
s->base=s->top=NULL;
s->stackSize=;
return OK;
} /*把S栈置为空栈*/
Status clearStack(sqStack *s){
s->base=s->top;
return OK;
} /*判断栈是否为空栈*/
bool emptyStack(sqStack *s){
if(s->base==s->top)
return TRUE;
else
return FALSE;
} int stackLength(sqStack *s){
return s->top-s->base;
}
/*入栈*/
Status push(sqStack *s,sElemType e){
if(s->top-s->base>=(s->stackSize-))
{
s->base=(sElemType *)realloc(s->base,(INIT_STACK_SIZE+STACK_INCREMENT)*sizeof(sElemType));
s->top=s->base+s->stackSize-;
s->stackSize+=STACK_INCREMENT;
}
*(s->top)=e;
s->top++;
return OK;
} /*出栈*/
Status pop(sqStack *s,sElemType *e){
if(s->base==s->top)
return ERROR;
*e=*--s->top;
return OK;
} /*得到栈顶元素*/
Status getTop(sqStack s,sElemType *e){
if(s.base==s.top)
return ERROR;
*e=*(s.top-);
return OK;
} int visit(sElemType c){
printf("%d ",c);
return ;
}
/*遍历栈*/
Status stackTraverse(sqStack *s,int (*visit)(sElemType)){
for(sElemType *i=s->base;i<s->top;i++){
visit(*i);
}
return OK;
} int main(){
sqStack S;
initStack(&S);
printf("\n请输入您想入栈数据的个数:");
int m;
sElemType e;
scanf("%d",&m);
for(int i=;i<=m;i++){
printf("\n请输入第%d个数据",i);
scanf("%d",&e);
push(&S,e);
} stackTraverse(&S,visit);
printf("\n弹出一个数据后");
pop(&S,&e);
stackTraverse(&S,visit);
printf("\n得到的栈顶元素:");
getTop(S,&e);
printf("%d\n",e);
printf("栈的长度为%d",stackLength(&S)); system("pause");
return ;
}

栈的顺序存储方式的C语言实现的更多相关文章

  1. 线性表顺序存储方式的C语言实现

    /* 编译器VC6++ 文件名1.cpp 代码版本号:1.0 时间:2015年9月14日16:39:21 */ #include <stdio.h> #include <stdlib ...

  2. 栈的顺序存储和链式存储c语言实现

    一. 栈 栈的定义:栈是只允许在一端进行插入或删除操作的线性表. 1.栈的顺序存储 栈顶指针:S.top,初始设为-1 栈顶元素:S.data[S.top] 进栈操作:栈不满时,栈顶指针先加1,再到栈 ...

  3. C语言- 基础数据结构和算法 - 栈的顺序存储

    听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...

  4. 递归转手工栈处理的一般式[C语言]

    是任意形式的递归,是化解的一般式. 主题所谓的“递归调用化解为栈处理”,意思是,将递归函数调用化解为“一个由stack_push stack_pop stack_top等函数调用组成的循环式子”.这里 ...

  5. 栈的顺序存储 - 设计与实现 - API实现

    Stack基本概念 栈是一种 特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 Stack的常用操作 创建栈 销毁栈 清空栈 进栈 出 ...

  6. 执行Go程序的三种方式及Go语言关键字

    执行 Go 程序的三种方式及 Go 语言关键字 执行 Go 程序的三种方式 一.使用 go run 命令 二.使用 go build 命令 Step1. 对 go 源码源文件执行 go build 命 ...

  7. 请写出JAVA弹栈压栈的步骤, 栈的存储方式

    一.栈的作用 1. 栈的存放 局部变量 堆中对象的引用(对象在堆内存中的地址)   一个对象的大小无法估计,但是一个对象的引用只占4byte   基本数据类型的变量没有什么存储区域的说法,内存中分为两 ...

  8. C语言实现栈(顺序存储方式)

    #include <stdio.h> #include <stdlib.h> //提供malloc()原型 #include <stdbool.h> //提供tru ...

  9. 线性表之顺序存储结构(C语言动态数组实现)

    线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...

随机推荐

  1. spj题

    S(SNO,SNAME,SCITY) ,P(PNO,PNAME,COLOR,WEIGHT) ,J(JNO,JNAME,JCITY),其中S表示供应商,它的各属性依次为供应商号,供应商名,供应商所在城市 ...

  2. android下隐藏标题栏

    最近在开发android,遇到一个问题标题栏影响美观,查了很多网上方法. 用到了方法一: requestWindowFeature(Window.FEATURE_NO_TITLE); 虽然一直强调要在 ...

  3. [Sequence Alignment Methods] Dynamic time warping (DTW)

    本系列介绍几种序列对齐方法,包括Dynamic time warping (DTW),Smith–Waterman algorithm,Cross-recurrence plot Dynamic ti ...

  4. ganglia 启动命令

    gmond 版本号 3.1.7 sudo service ganglia-monitor start 验证是否打开 telnet localhost 8649 gmetad 版本号3.1.7 serv ...

  5. continuous integration and continuous deployment in DW/BI

    deployment methodIn Redshift1, Deploy process: Drop and Refresh the view, Drop table, Create an empt ...

  6. MySQL删除重复记录的方法

    参考网上的方法,总结了产出重复记录的方法,欢迎交流. 参考:http://www.cnblogs.com/nzbbody/p/4470638.html 方法1:创建一个新表临时储存数据 假设我们有一个 ...

  7. DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)

            本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...

  8. Android图片框架---Glide

    Glide *** 使用* 一.添加依赖* compile 'com.github.bumptech.glide:glide:3.7.0'* compile 'com.android.support: ...

  9. 在Eclipse中使用JUnit4进行单元測试(0基础篇)

    本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...

  10. Valgrind 安装与使用

    调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz2 2. 解压安装包:tar –jxvf ...