关于栈:栈与队列

33次阅读

共计 1036 个字符,预计需要花费 3 分钟才能阅读完成。

1. 栈是只运行在一端操作的线性表。n 个元素进栈,出栈元素不同排列个数为 2n!/n!/(n+1)

一般栈:#define Maxsize 10
typedef struct{ElemType data[Maxsize];
     int top;...... 栈顶指针,因为栈实质上是数组,所以指针能够简化为一个数
}Sqstack;

共享栈:typedef struct{ElemType data[Maxsize];
     int top0;
     int top1;
}Shstack;

void InitStack(Shstack &S){
     S.top0=-1;
     S.top1=Maxsize;
}
栈满条件:top0+1=top1

2. 队列是在一端进,一端出的线性表

#define Maxsize 10
typedef struct{ElemType data[Maxsize];
     int front,rear;
}SqQueue;

3. 队列的插入与删除
因为队列波及到来头尾的问题,所以为了运算不便,咱们应用模运算将队列在逻辑上变为环形

bool EnQueue(SqQueue &Q,Elemtype x){if((Q.rear+1)%MaxSize==Q.front)
                 return false;
       Q.data[Q.rear]=x;
       Q.rear=(Q.rear+1)%Maxsize;
       return true;
}

bool DeQueue(SqQueue &Q,Elemtype &x){if(Q.rear+1==Q.front)
                 return false;
       Q.data[Q.front]=x;
       Q.front=(Q.front+1)%Maxsize;
       return true;
}

4. 判断队列空满的形式
计划一:

就义了一个存储空间(即 rear 指向的那个地位)

计划二:

计划三:

5. 其余出题形式

有时 rear 指向的是队尾元素所在位置(起始时 rear=front=0)(后面所写代码和判断形式均建设在这种形式上),有时指向的是队尾元素的下一个地位(起始时 rear=n-1,front=0)

前一种:Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%Maxsize;

后一种:Q.rear=(Q.rear+1)%Maxsize;
Q.data[Q.rear]=x;

然而对于后一种,咱们不能通过(Q.rear+1)%MaxSize==Q.front 判断队满,因为它的队空是这样判断的,因而咱们能够就义一个存储单元,即当 rear=n-2,front= 0 时就队满,或者通过设置 size 来判断

正文完
 0