数据结构-栈

栈(LIFO

一种特殊的线性表,限定在表尾进行插入或删除

-表尾称为栈顶,是浮动的。表头称为栈底,是固定的。

-栈插入删除元素不需要移动数据元素。


栈的抽象数据类型

ADT Stack{

数据对象:D={ai|aiElemSet,i=1,2,…n,n>=0}

数据关系:R={<ai-1,ai>|ai-1,aiD,i=1,2,…n}

基本操作:

InitStack(&S);      //构造一个栈

DestroyStack(&S);  //销毁栈

StackEmpty(S);    //判栈空,若空返回TRUE,否则返回FALSE

StackLength(S);    //返回栈的长度

GetTop(S,&e); //返回栈顶元素

Push(&S,e); //插入元素e为新的栈顶元素

Pop(&S,e) //删除栈顶元素,并返回改值

}ADT Stack

-栈的顺序表示:用一组连续的存储单元依次存放栈中每个数据元素。

-实现

const MAXSTACK=100;

typedef struct{

SElemType Data[MAXSTACK];

int top;

}SqStack;

-初始化栈S

void InitStack(SqStack &S){

S.top=0;

}//InitStack


-入栈

void Push(SqStack &S,SElemType e){

if(S.top==MAXSTACK) return OVERFLOW;

else{

S.Data[S.top]=e;

S.top++;

}

}//Push





-出栈

void Pop(SqStack &S,SElemType e){

if(StackEmpty(S)) return ERROR;

else {

S.top--;

e=S.Data[S.top];

}

}//Pop

-返回栈顶元素

void GetTop(SqStack S,SElemType e){

if(StackEmpty(s)) return ERROR;

else e=S.Data[S.top-1];

}//GetTop


-判栈空,若空返回TRUE,否则返回FALSE

int StackEmpty(SqStack S){

if(S.top==0) return TRUE;

else return FALSE;

}//StackEmpty

-栈的链式表示:

-实现

typedef struct node{      //数据元素

SElemType data;

struct node *next;

}SNode;

typedef struct stack{      //栈顶指针

SNode *top;

}SqStack;


-初始化S

void InitStack(SqStack &S){

S.top=null;

}

-入栈

void Push(SqStack &S,SElemType e){

p=new SNode;

if(!p) return ERROR;

else{

p->data=e;

p->next=s->top;

s-top=p;

}

}//Push


-出栈

void Pop(SqStack *s,SElemType &e){

if(StackEmpty(s))return ERROR;

else{

e=s->top->data;

p=s->top;

s->top=p->next;

delete p;

}

}


-获取栈顶元素内容

void GetTop(SqStack S,SElemType &e){

if(StackEmpty(S)) return ERROR;

else e=S.top->data;

}//GetTop


-判断栈S是否为空

int StackEmpty(SqStack S){

if(S.top==null) return TRUE;

else return FALSE;

}//StackEmpty

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值