栈的顺序存储方式的C语言实现
/*
编译器: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语言实现的更多相关文章
- 线性表顺序存储方式的C语言实现
/* 编译器VC6++ 文件名1.cpp 代码版本号:1.0 时间:2015年9月14日16:39:21 */ #include <stdio.h> #include <stdlib ...
- 栈的顺序存储和链式存储c语言实现
一. 栈 栈的定义:栈是只允许在一端进行插入或删除操作的线性表. 1.栈的顺序存储 栈顶指针:S.top,初始设为-1 栈顶元素:S.data[S.top] 进栈操作:栈不满时,栈顶指针先加1,再到栈 ...
- C语言- 基础数据结构和算法 - 栈的顺序存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- 递归转手工栈处理的一般式[C语言]
是任意形式的递归,是化解的一般式. 主题所谓的“递归调用化解为栈处理”,意思是,将递归函数调用化解为“一个由stack_push stack_pop stack_top等函数调用组成的循环式子”.这里 ...
- 栈的顺序存储 - 设计与实现 - API实现
Stack基本概念 栈是一种 特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 Stack的常用操作 创建栈 销毁栈 清空栈 进栈 出 ...
- 执行Go程序的三种方式及Go语言关键字
执行 Go 程序的三种方式及 Go 语言关键字 执行 Go 程序的三种方式 一.使用 go run 命令 二.使用 go build 命令 Step1. 对 go 源码源文件执行 go build 命 ...
- 请写出JAVA弹栈压栈的步骤, 栈的存储方式
一.栈的作用 1. 栈的存放 局部变量 堆中对象的引用(对象在堆内存中的地址) 一个对象的大小无法估计,但是一个对象的引用只占4byte 基本数据类型的变量没有什么存储区域的说法,内存中分为两 ...
- C语言实现栈(顺序存储方式)
#include <stdio.h> #include <stdlib.h> //提供malloc()原型 #include <stdbool.h> //提供tru ...
- 线性表之顺序存储结构(C语言动态数组实现)
线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...
随机推荐
- BagTest
package cn.aust.zyw.demo; import java.util.Iterator; /** * Created by zyw on 2016/2/17. */ public cl ...
- poj 1631 LIS
题目链接:http://poj.org/problem?id=1631 #include <cstdio> #include <cstring> #include <io ...
- 【asp.net爬虫】asp.NET分页控件抓取第n页数据 javascript:__doPostBack
最近在模拟HTTP请求抓取数据,但是服务器是asp.net开发的 分页控件代码 <tr> <td align="left">共 210&am ...
- 必胜宅急送Web app设计背后的思考
O2O模式是餐饮业在移动消费趋势下主动拥抱互联网的方向,迎合餐饮消费者从以往经验判断为主转变为依靠移动设备.lbs.社交网络进行立体决策的过程.继App客户端之后,手机web app也逐渐成为O2O中 ...
- [置顶] 数据持久层(DAO)常用功能–通用API的实现
在Web开发中,一般都分3层. Controller/Action 控制层, Service/Business 服务层/业务逻辑层, Dao 数据访问层/数据持久层. 在学习和工作的实践过程中,我发现 ...
- 最近新出的C++右值引用的意思
看了一下这种方法的介绍,个人感觉,右值引用,更像人类的思想了,有些将编译前与编译后结合紧密的感觉. 左值引用是变量名的别名,右值引用是值的别名,也就是不将值赋给一个变量名所在的地址,直接将值所在的初始 ...
- XTU OJ 1210 Happy Number (暴力+打表)
Problem Description Recently, Mr. Xie learn the concept of happy number. A happy number is a number ...
- 数据的存储-NSKeyedArchiver和write to file介绍
数据的存储-NSKeyedArchiver和write to file介绍 首先介绍各个文件的作用-->讲解文件位置的查找方法-->介绍数据存储的方式:1.使用归档方式存储数据 2.wri ...
- 从C到汇编:栈是计算机工作的基础
作者:r1ce 原创作品转载请注明出处 <Linux内核分析> MOOC课程http://mooc.study.163.com/course/U ...
- HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
1.将String字符串转换成Blob对象 //将字符串 转换成 Blob 对象 var blob = new Blob(["Hello World!"], { type: 'te ...