数据结构的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)

其实,实现栈有很多种方法,但万变不离其宗,根据栈先进后出的特性,有两种方式可以实现,即要么始终指向可读空间,要么始终指向可写空间。下面以始终指向可写空间为例进行阐述!之后大家想想如何更改来用始终指向可...

C数据结构之顺序栈(数组实现2)

接着上面继续阐述c的数据结构之顺序栈(数组实现2),与上面不同的是,这种栈,虽名为栈,但实质是在堆区实现的栈,本质上是栈,只不过是在堆区实现的。这样做是为了节省程序本身的栈区空间,在更大的堆区来实现具...

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

//线性顺序表 #include #include #define LIST_INIT_SIZE 1000 //线性表存储空间的初始分配量 #define LISTINCRESEMENT 100 ...
  • mpbchina
  • mpbchina
  • 2012年03月22日 18:23
  • 12969

数据结构(C实现)------- 顺序表

顺序表的C实现

简单数据结构之顺序表(C实现)

/* ============================================================================ Name : sequ...

[自学《数据结构(C语言版)》] C中顺序线性表的实现(一)

线性表是最常用且最简单的一种数据结构。它是n个数据元素的有限序列。 线性表的顺序储存结构称为顺序表,顺序表中相邻的元素在计算机内有着相邻的存储位置。 顺序表是一种能够随机存取的存储结构。下面列出顺...

c数据结构的顺序存储的实现

c,数据结构,顺序表的实现

数据结构用顺序栈实现汉诺塔

  • 2010年11月11日 16:46
  • 529B
  • 下载

【数据结构C实现】1.顺序表实现

#include #include #define INIT_SIZE 100 #define LIST_INCRE 10 struct SqList{ int* pElem; int leng...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构的C实现_顺序栈
举报原因:
原因补充:

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