数据结构-栈

版权声明:只为学习之用,有不对的地方请告诉我,谢谢! https://blog.csdn.net/darkxiaoming/article/details/79949685

栈(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

阅读更多

没有更多推荐了,返回首页