c语言描述的顺序栈实现
#include<stdio.h>
#include<stdlib.h>
#define initsize 100
#define ok 1
#define error 0
typedef int Status;
typedef char ElemType;
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
static SqStack *S;
Status InitStack(SqStack *S){
S->base=(ElemType *)malloc(initsize*sizeof(ElemType));
if(!S->base){
printf("分配内存失败!");
exit(error);
}
S=->top=S->base;
S->stacksize=initsize;
return ok;
}
Status StackEmpty(SqStack *S){
if(S->base==S->top){
return true;
}else{
return false;
}
}
Status DestroyStack(SqStack *S){
free(S->base);
return 0;
}
Status ClearStack(SqStack *S);
Status StackEmpty(SqStack *S);
Status StackLength(SqStack *S);
Status GetTop(SqStack *S,ElemType e){
if(S->top!=S->base){
e=*(S->top-);//非空栈的栈顶指针始终在栈顶元素的下一个位置
}
return e;
} Status Push(SqStack *S,ElemType e){
if(S->top-S->base>=initsize){
S->base=(ElemType *)realloc(S->base,(initsize+)*sizeof(ElemType))
if(!S->base){
printf("内存分配失败");
exit(error);
}
S->stacksize+=;
S->top=S->base+S->stacksize;//此处的initsize为没有重新分派的initsize因为分配了空间不代表着top就要指向最顶
}
*S->top++=e;
return ok;
}
Status Pop(SqStack *S,ElemType *e){
if(S->top!=S->base){
S->top--;
e=*S->top;
return ok;
}else{
return error;
}
}
Status StackTraverse(const SqStack *S){
int *p;
if(S->base==S->top){
exit(error);
}else{
for(p=S->base;p<S->top;p++){
printf("%c \n",*p);
}
}
}
void main(){
int m;
InitStack(S);
printf("请输入一个入栈元素\n",&m);
Push(S,m);
StackTraverse(S);
}
c语言描述的顺序栈实现的更多相关文章
- c语言描述的顺序表实现
//顺序表的实现:(分配一段连续地址给顺序表,像数组一样去操作) #include<stdio.h> #include<stdlib.h> #define OK 1 #defi ...
- 【数据结构】之栈(C语言描述)
栈(Stack)是编程中最常用的数据结构之一. 栈的特点是“后进先出”,就像堆积木一样,堆的时候要一块一块堆到最上面,拆的时候需要从最上面一块一块往下拆.栈的原理也一样,只不过它的操作不叫堆和拆,而是 ...
- 【数据结构】之顺序表(Java语言描述)
之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...
- 利用栈实现算术表达式求值(Java语言描述)
利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...
- 顺序栈的基本操作(C语言)
由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址 但是这种用法好像C并不 ...
- 数据结构与算法之顺序栈C语言实现
顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...
- C语言实现顺序栈
C语言实现顺序栈,顺便加深刻++i,++i的区别 #include <stdio.h>#include <stdlib.h>#define maxsize 100/*写在前面的 ...
- C++语言实现顺序栈
C++语言实现顺序栈 在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以去我的博客看看.在这篇博 ...
- C语言实现顺序栈以及栈的特点
什么是栈? 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如下图所示. 从上图我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 ...
随机推荐
- nginx 导致文件上传中途中断 Failed to load resource: net::ERR_CONNECTION_RESET
昨天上传文件出了问题,常常在进度条到一半的时候就终止了.在本地测试的时候倒是没问题,今天早上用花生壳换了另一个域名,在我本地和服务器都测试,却能够上传文件成功.然后就想到了可能是nginx的问题,也在 ...
- 4、加载:Loading
/* ---html----*/ <ion-content> <button (click)="manual()">手动关闭</button> ...
- 解决:用nvm成功安装nodejs,却无法使用nvm和node命令
问题 一个前端朋友,用Macbook pro成功安装nvm以及node环境,系统查询不到 $ nvm $ -bash: nvm: command not found $ node $ -bash: n ...
- Halcon学习笔记——机器视觉应用工程开发思路及相机标定
机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2. ...
- c# 快速修改图片颜色
public static void ChangeColour(this Bitmap bmp, byte inColourR, byte inColourG, byte inColourB, byt ...
- 【Q】类和对象:游戏角色开发(角色介绍)
案例情景:某公司要开发新游戏,请用面向对象的思想设计英雄类.怪物类和武器类. 编写测试类,创建英雄对象.怪物对象和武器对象,并输出各自的信息. 其中设定分别如下: 1.英雄类 属性:英雄名字.生命值. ...
- CSS动画效果
CSS变形效果 Transform translate:平移 translate(x,y) translateX(x) translateY(y)相对于元素原始位置平移. scale:缩放 大于1放大 ...
- Microsoft BI - SSRS
1. Shared Dataset 功能在 SQL Server 2008 R2 / 2012 / 2014 的下列三个版本中不支持,详情请参考此处: Express Edition with Adv ...
- AngularJs整合ui-bootstrap以及ui-grid
1. ui-bootstrap 参考博客: http://www.cnblogs.com/pilixiami/p/5597634.html (这篇博客写的非常不错,值得推荐) angular-ui ...
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比--转载
在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一 ...