数据结构c语言栈的基本操作实验报告,数据结构(C语言)读书笔记4:栈及基本操作...

1、栈是限定仅在表尾进行插入和删除操作的线性表。是一种特殊的线性表。表头端称为栈底(bottom),表尾端称为栈顶(top)。特点是一种后进先出的线性表。

2、栈的抽象数据类型的定义:

ADT Stack{

数据对象:D={ai | ai∈ElemSet,i=1,2,。。。。n}

数据关系:R={ | ai-1, ai∈D, i = 2, ..., n }

基本操作:

initStack(&S)

操作结果:构造一个空栈S;

DestoryStack(&S)

初始条件:栈S已存在。

操作结果:销毁栈S。

ClearStack(&S)

初始条件:栈S已存在

操作结果:将栈S置为空栈

StackEmpty(S)

初始条件:栈S已存在

操作结果:若栈S为空栈,返回True ,否则返回false。

StackLength(S)

初始条件:栈S已存在

操作结果:返回S的元素个数,即长度。

GetTop(S,&e)

初始条件:栈S已存在且非空

操作结果:用e返回S的栈顶元素

Push(&S,e)

初始条件:栈S已存在

操作结果:将e插入为S的新的栈顶元素。

Pop(&S,&e)

初始条件:栈S已存在,且非空

操作结果:删除栈顶元素,并用e返回

}ADT Stack

3、顺序栈:即栈的顺序存储结构,用一组地址连续的存储单元依次存储自栈底到栈顶的数据元素。 top指针是栈顶指针,base指针是栈底指针,一般top=0,或者top=base,为空栈。base的值为NULL,表示栈结构不存在。

————————栈的顺序存储表示——————————

#define STACK_INNT_SIZE  100

#define STACKINCREMENT 10

typedef struct {

ElemType * base;//在构造前或者销毁后base=NULL

ElemType *top;//栈顶指针

int  stacksize;

}SqStack;

————————基本操作的算法描述——————————

Status InitStack(SqStack &S)//初始化

{

S.base=(ElemType *)malloc(STACK_INNT_SIZE * sizeof(ElemType));

if(!S.base) exit(OVERFLOW);

S.top=S.base;

S.stacksize=STACK_INNT_SIZE;

return OK;

}

Status GetTop(SqStack  S,ElemType e)//得到栈顶元素

{

if(S.top==S.base) return ERROR;

e=*(S.top-1);

return OK;

}

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;

}

Status Pop(SqStack  &S,ElemType &e)//出栈

{

if(S.top==S.base)return ERROR;

e=*--S.top;

return OK;

}

————————链栈的基本操作——————————————

Status InitStack(&S)//初始化构造空链栈

{

S=NULL;

return OK;

}

Status Push(&S,e)//入栈

{

P= new StackNode;

P->data=e;

P->next=S;

S=P;

return OK;

}

Status Pop(&S,&e)//出栈

{

if(S=NULL) return ERROR;

e=S.data;

p=S;

S=S.next;

delete p;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值