栈的顺序储存结构与操作

Posted 天赋不够努力来凑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的顺序储存结构与操作相关的知识,希望对你有一定的参考价值。

一、栈的定义

栈是一种只能在一端(栈顶)进行操作的数据结构,具有后进先出的特点。

二、栈的顺序储存结构

1、基本结构

typedef struct SqStack

    SElemType data[MAXSIZE];
    int top;//栈顶下标,相当于栈顶指针,始终指向栈顶元素
SqStack;

2、基本操作
进栈操作

int Push(SqStack *S,SElemType e)

    if(S->top==MAXSIZE-1)//栈满
        return 0;
    S->top++;//栈顶指针加一
    S->data[S->top]=e;//将新元素赋值给栈顶
    return 1;

出栈操作

int Pop(SqStack *S,SElemType *e)

    if(S->top==-1)//栈空
        return 0;
    *e=S->data[S->top];//将栈顶元素赋值给e
    S->top--;//栈顶指针减一
    return 1;

3、两栈共享空间
利用栈的数组结构时,虽然插入删除方便,但是我们却要先确定好数组储存空间,不够用了又得扩充容量,很麻烦,如果我们有两个相同类型的栈,我们可以将两个栈合并一起,形成共享空间,可以提高栈的利用率。

基本结构

typedef struct

   SElemType data[MAXSIZE];
   int top1;//栈1栈顶指针
   int top2;//栈2栈顶指针
SqDoubleStack;

特点:(1)一个栈(记为栈1)的栈底作为首段,下标为0,另一个栈(记为栈2)的栈底作为尾端。
(2)当top1=-1时栈1为空,top2=n-1时栈二为空,top1+1=top2时,栈满。

基本操作
(1)push

int push(SqDoubleStack *S,SElemType e,int stackNumber)

    if(S->top1+1==S->top2)//判断是否栈满
        return 0;
    if(stackNumber==1)//栈1进栈
        S->data[++S->top1]=e;
    else if(stackNumber==2)//栈2进栈
        S->data[--S->top2]=e;
    return 1;

(2)pop

int Pop(SqDoubleStack *S,SElemType *e,int stackNumber)

    if(stackNumber==1)
    
        if(S->top1==-1)
            return 0;
        else
            *e=S->data[S->top1--];
    
    if(stackNumber==2)
    
        if(S->top2==MAXSIZE-1)
            return 0;
        else
            *e=S->data[S->top2++];
    
    return 1;

以上是关于栈的顺序储存结构与操作的主要内容,如果未能解决你的问题,请参考以下文章

栈与队列:栈的顺序储存结构

栈的顺序存储结构

数据结构与算法:栈

数据结构与算法--栈和队列

数据结构--栈与队列

栈与队列