数据结构的C实现_顺序栈

原创 2012年03月22日 18:28:44
//编译环境 visual studio 2008,win32 console application.
//SqStack.c

//顺序栈
#include <stdio.h>
#include <stdlib.h>
#define    OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACKINITSIZE 100//初始化空间分配量
#define STACKINCREASEMENT 10//分配增量
typedef char elemType;//元素类型

typedef struct
{
elemType *top;
elemType *base;
int stacksize;
}SqStack;

//初始化栈
int InitStack(SqStack *s)
{
s->base=(elemType *)malloc(STACKINITSIZE*sizeof(elemType));
if(!s->base) exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACKINITSIZE;
return OK;
}

//获取栈的长度(元素个数)
int StackLength(SqStack *s)
{
int length=0;
elemType *p=s->base;
while(p!=s->top)//自下朝上增加
{
p++;
length++;
}
return length;
}
//获取栈的长度(元素个数),另一种方法
void GetLength(SqStack *s)
{
printf("栈的元素个数为%d\n",s->top-s->base);
}

//遍历栈,自顶向下
int StackTraverse(SqStack *s)
{
elemType *p=s->top;
printf("该栈自顶向下的元素为:\n");
while(p!=s->base)
{
p--;
printf("%c",*p);
}
printf("\n");
return OK;
}

//获取栈顶元素
int GetTop(SqStack *s)
{
if(s->top==s->base)
printf("栈为空\n");
return ERROR;
printf("%c",*(s->top-1));
return OK;
}

//插入值为e的栈顶元素
int Push(SqStack *s,elemType e)
{
if(s->top-s->base==s->stacksize)//栈满,插入栈顶元素需要重新分配空间
{
s->base=(elemType *)realloc(s->base,(s->stacksize+STACKINCREASEMENT)*sizeof(elemType));
if(!s->base) exit(OVERFLOW);
s->top=s->base+STACKINCREASEMENT;
}
//*(s->top++)=e;
*(s->top)=e;
s->top++;//top指向栈顶元素的上方,先赋值,再top++
return OK;
}

//删除栈顶元素
int Pop(SqStack *s)
{
if(s->base==s->top)
{
printf("栈为空\n");
return ERROR;
}
//printf("已删除栈顶元素 %c\n",*(--s->top));
s->top--;
printf("已删除栈顶元素 %c\n",*(s->top));//top指向栈顶元素的上方,先top--,再输出值
return OK;
}
//判断栈是否为空
void StackEmpty(SqStack *s)
{
if(s->top==s->base)
printf("该栈为空\n");
else
printf("该栈不为空\n");
}
//清空栈
int ClearStack(SqStack *s)
{
if(s->base==s->top)
printf("栈已经为空\n");
else
{s->base=s->top;
printf("栈已经被清空\n");
}
return OK;
}

main()
{
SqStack *s=(SqStack*)malloc(sizeof(SqStack));
InitStack(s);
StackEmpty(s);
printf("插入栈顶元素...\n");
Push(s,'a');
Push(s,'b');
Push(s,'c');
Push(s,'d');
StackEmpty(s);
StackTraverse(s);
printf("栈的元素个数为%d\n",StackLength(s));
//GetLength(s);
Pop(s);
StackTraverse(s);
//printf("栈的元素个数为%d\n",StackLength(s));
GetLength(s);
ClearStack(s);
StackEmpty(s);
printf("栈的元素个数为%d\n",StackLength(s));
//GetLength(s);
} 


数据结构(严蔚敏)之三——顺序栈之c语言实现

实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈 (6...
  • GreenHandCGL
  • GreenHandCGL
  • 2015年04月03日 00:07
  • 2186

顺序栈的九种基本操作和实现(数据结构C语言版清华大学严蔚敏)

栈是仅限定在表尾进行插入和删除操作的线性表,在严蔚敏版的C语言版的数据结构中共定义了九种栈的基本操作;分别是构造 销毁 清空 栈长 栈顶 插入 删除 遍历。下面就是代码实现: 头文件和宏定义(保存...
  • WLxinliang
  • WLxinliang
  • 2016年10月22日 19:51
  • 5133

数据结构——栈—— 顺序栈(附java实现)

堆栈(英语:stack),也可直接称栈。中国大陆作堆栈,台湾作堆叠,在计算机科学中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶端指标,英语:top)进行...
  • A_lele123
  • A_lele123
  • 2013年12月06日 13:51
  • 1363

顺序栈的实现 C语言版(一)

/* 顺序栈的实现以及相关操作 C语言版 作者:S_hmily 日期:2011年8月31日 编译环境:VC++6.0 栈空 top == bottom bottom始终等于0...
  • zhuyi2654715
  • zhuyi2654715
  • 2011年08月31日 14:32
  • 3767

顺序栈 C语言实现

最近复习C和数据结构,顺序栈是最简单的栈实现。它是用数组来存放数据,用一个int变量来记录当前栈顶元素的下标,用-1来表示空栈,结构简单。写一个完整的测试程序,编译器虽然是C++的,但程序是按照C语言...
  • nyzhl
  • nyzhl
  • 2007年09月08日 17:42
  • 6595

数据结构学习心得——顺序栈和链栈

栈的定义栈是限定尽在表尾进行插入或者删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶,相应地,表头端称为栈底。不含元素的空表称为空栈。栈又称为后进先出的线性表。 和线性表类似,栈也...
  • u012350430
  • u012350430
  • 2017年08月23日 17:47
  • 1188

数据结构顺序栈的创建、初始化、出栈、入栈及销毁

开始学习数据结构已经一个月了,一共上了16节课,开始还是有点困难,毕竟过了一个暑假,C++的知识有些遗忘,还有就是指针部分学习海华丝不够扎实,所以这个月在数据结构这个课程上面,还是有点点吃力,所以先开...
  • Seven_Yang_C
  • Seven_Yang_C
  • 2015年09月26日 22:56
  • 2210

数据结构顺序栈和链栈基本操作----c++实现

顺序栈: #include using namespace std; #define MaxSize 50 class SeqStack{ private: int data[MaxSize]...
  • supersnow0622
  • supersnow0622
  • 2012年11月25日 16:48
  • 4256

数据结构之栈的顺序表示及其实现

记录一下自己学习过程中写的代码。以下是我看严蔚敏老师的数据结构教材后,结合教材所讲用C语言实现了关于栈的顺序表示及其实现的基本操作,供以后复习所用。本程序建立的栈是一个顺序栈,即该栈是利用一组地址连续...
  • jsrcdjcyy
  • jsrcdjcyy
  • 2016年08月06日 17:21
  • 1939

[数据结构]栈之顺序栈的类模板实现

栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小。 Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数。 #ifndef STACK #define STACK //栈...
  • u013467442
  • u013467442
  • 2015年06月20日 15:48
  • 1300
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构的C实现_顺序栈
举报原因:
原因补充:

(最多只允许输入30个字)