#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语言描述的顺序栈实现的更多相关文章

  1. c语言描述的顺序表实现

    //顺序表的实现:(分配一段连续地址给顺序表,像数组一样去操作) #include<stdio.h> #include<stdlib.h> #define OK 1 #defi ...

  2. 【数据结构】之栈(C语言描述)

    栈(Stack)是编程中最常用的数据结构之一. 栈的特点是“后进先出”,就像堆积木一样,堆的时候要一块一块堆到最上面,拆的时候需要从最上面一块一块往下拆.栈的原理也一样,只不过它的操作不叫堆和拆,而是 ...

  3. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  4. 利用栈实现算术表达式求值(Java语言描述)

    利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

  5. 顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  6. 数据结构与算法之顺序栈C语言实现

    顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...

  7. C语言实现顺序栈

    C语言实现顺序栈,顺便加深刻++i,++i的区别 #include <stdio.h>#include <stdlib.h>#define maxsize 100/*写在前面的 ...

  8. C++语言实现顺序栈

    C++语言实现顺序栈 在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以去我的博客看看.在这篇博 ...

  9. C语言实现顺序栈以及栈的特点

    什么是栈? 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如下图所示. 从上图我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 ...

随机推荐

  1. dojo入门

    1.引入dojo.js dojo的发行包里有4个子目录,要引入的文件是名叫"dojo"的子目录里的dojo.js. 假设你是这样的目录结构: project | +--dojo-l ...

  2. VMWare启动虚拟机失败,提示锁定文件失败解决方法

    1.问题描述:未正常关闭虚拟机,重新启动时,VMWare启动虚拟机失败 2.解决方法: ①找到该虚拟系统所在的目录,即弹出框中的目录,在目录中找到Windows XP Professional.vmx ...

  3. [转]Create Custom Exception Filter in ASP.NET Core

    本文转自:http://www.binaryintellect.net/articles/5df6e275-1148-45a1-a8b3-0ba2c7c9cea1.aspx In my previou ...

  4. 针对在webview模式中,小米魅族手机不支持html5原生video的control的解决办法![原创]

    其实,解决办法就是,重新写个control控制功能,.同样用流行的video.js可以实现 第一步就是增加个播放的图片..要不然没有按钮多难看! <div class="videoDi ...

  5. 多线程TCP的socket通信

    应用多线程来实现服务器与多客户端之间的通信. 基本步骤: 1.服务器端创建ServerSocket,循环调用accept()等待客户端的连接 2.客户端创建一个socket并请求和服务器端的连接 3. ...

  6. jQuery动态添加删除CSS样式

    jQuery框架提供了两个CSS样式操作方法,一个是追加样式addClass,一个是移除样式removeClass,下面通过一个小例子讲解用法. jQuery动态追加移除CSS样式 <!DOCT ...

  7. 隐藏 google 地图 Logo 隐藏 百度 地图 Logo

    Google 地图 var isFirstLoad=true; //地图瓦片加载完成之后的回调 google.maps.event.addListener(map, 'tilesloaded', fu ...

  8. Eclipse SWT

    Reference: http://www.eclipse.org/swt/ http://www.functionx.com/win32/Lesson01.htm http://www.win32d ...

  9. 17_重入锁ReentrantLock

    [概述] 重入锁可以完全代替synchronized关键字. 与synchronized相比,重入锁ReentrantLock有着显示的操作过程,即开发人员必须手动指定何时加锁,何时释放锁,所以重入锁 ...

  10. Qtl和JS、HTML通信/交互

    http://www.cnblogs.com/sigma0/p/7346727.html Qt的QWebChannel和JS.HTML通信/交互驱动百度地图 0 前言 我一个研究嵌入式的,不知道怎么就 ...