c语言版数据结构 空栈的构造

c语言版数据结构 空栈的构造,第1张

栈的本意是一个数镇旁组,里面存取数据的方式是先进后出。因此,你需要一个cusor来指定当前的栈顶(可能你使用top实现的),你可能还需要当前存侍虚放了多少数据进栈了,栈是否空、满,因此你还需要一个int变量计算栈元素个数。没push+1,没pop -1。你完全不需要成员stacksize,还有你需要一个栈元素个数的计数器。另外你不需老旅燃要将形参由引用该为指针,反而降低效率!

c语言构建栈就可以了,采用的方式是两种,一种是采用数组建栈,一种是采用指针建栈。

#include"stdio.h"

#include"malloc.h"

#include"stdlib.h"

#define OK1

#define ERROR 0

#define OVERFLOW -2

#define TRUE 1

#define FALSE 0

typedef char ElemType

typedef int Status

#define STACK_INIT_SIZE 100 //存储空间初始分配

#define STACKINCREMENT 10 //存储空间分配增量

typedef struct

{

ElemType *base//在栈构造和销毁之后,base的值为NULL

ElemType *top //栈顶指针

int stacksize//当前已分配的存储空间,以元素为单位

}SqStack

// 构造一个空栈S

Status InitStack(SqStack &S)

{

S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType))

if(!S.base) //存储分配失败

exit (OVERFLOW)

S.top=S.base

S.stacksize=STACK_INIT_SIZE

return OK

}//InitStack

/////////////////// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR /////

Status GetTop(SqStack S,ElemType &e)

{

if(S.top==S.base)

return ERROR

e=*(S.top-1)

return OK

}//GetTop

////////////////// 插入元素e为新的栈顶元素 /////////////////////////////////////

Status Push(SqStack &S,ElemType e)

{

if(S.top-S.base>=S.stacksize) //栈满,追加存储空间

{

S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(ElemType))

if(!S.base)

exit (OVERFLOW)

S.top=S.base+S.stacksize

S.stacksize+=STACKINCREMENT

}

*S.top++=e

return OK

}//Push

////////////////// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK否则返回ERROR

Status Pop(SqStack &S,ElemType &e)

{

if(S.top==S.base)

return ERROR

e=*--S.top

return OK

}//Pop

////////// main() //////////////////////////////

void main()

{

int i

char ch,e,c

SqStack S

InitStack(S)

printf("1.Push\t2.Pop\t3.GetTop\t4.exit\n")

while(1)

{

printf("请渣余帆选择:")

scanf("%d",&i)

c=getchar()//*****接受回毁世车符******

switch (i)

{

case 1:

printf("请输入要插入的元素:")

scanf("%c",&ch)

Push(S,ch)

break

case 2:

printf("d出栈顶元素:")

Pop(S,e)

printf("%c\n",e)

break

case 3:

printf("取栈顶元素:")

GetTop(S,e)

printf("%c\n",e)

break

case 4:

exit(0)

default:

printf("ERROR!Please Reput A Number\n")

}

}

}这就如雹算是一个建栈

s.top=s.base ;

这是空栈的必要条件

任何一个空栈的s.top=s.base 恒成立,即栈底指针和栈顶指针同指向栈底,此时栈空,画图可知

插入一个元素,s.top+1若是动态插入,则s.top++;

s.stacksize这个是初始存储空间分配量

例如:

#define STACK-INIT-SIZE 100 //此时初始空间大拆歼逗小为100,以元素为单位

#defineSTACKINCREMENT 10//这个是空间分配增量,空间不旅卖足用着个增加

提醒-------看标示符的英文意思就知道它代表的意思了

建议-------自学数据结构前,适当了改昌解一下离散数学及基本数量掌握C语言基础


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8205388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存