/*
编译器: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. Ubuntu中Nginx的安装与配置

    原文地址:http://www.cnblogs.com/languoliang/archive/2013/04/01/nginx.html 1.Nginx介绍 Nginx是一个非常轻量级的HTTP服务 ...

  2. 浅谈二维RMQ

    针对一些二维区间最值问题,用一维RMQ来解决显然是不够的.所以,要改进算法.鉴于网上没有PASCAL版的RMQ标程与解析,所以小可在这里简单的讲一下. 核心思想和一维的一样,只是在计算区间时略有不同. ...

  3. zoj 3462

    #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> ...

  4. poj1026

    题目大意:暗号 Bod 和 Alice 计划使用一种全新的编码方案,令人惊讶的是这不是一个公开的公匙密码,但是他们的编码基于密匙,在Philadelphia on February 16th他们的会议 ...

  5. foxmail客户端总是提示接收密码错误

    如上图所示. 我知道的一个原因是 发送太多邮件所致,导致发件服务器触发规则限制登录. 如果之前发的不是很多的话,可以在设置的帐号选项里删除这个账户,再重新建一个.

  6. sql server常用查询

    最近在做一些练习,觉得数据的查询是一个很有意思的,在做的过程中一些好的查询方法也使自己感觉到数据库的强大,于是乎就会想到要把这些方法记下来,以后就懒得再去想了 1.查询是整百的倍数 SELECT 实缴 ...

  7. Android 使用加速度传感器实现摇一摇功能及优化

    如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得 ...

  8. 解决Xcode6.0.1编译Unity3Dproject报错

    错误信息大概例如以下 Undefined symbols for architecture i386: "_clock$UNIX2003",.....等 大概就是引用了一个链接库出 ...

  9. The builder launch configuration could not be found

    Export Wizard Error      Errors occurred during the build Problems occured when invoking code from p ...

  10. Python下载漫画

    上午起来提不起劲,于是就用电脑看漫画,但是在线看漫画好烦,就想下下来看.一个一个点太麻烦,于是花了点时间用python写了个demo,把爱漫画的漫画下载下来,这样就可以随时随地看了.这也是我首次尝试用 ...