共计 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 来判断
正文完