版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lin1094201572/article/details/86072513
队列
#1. 队列不得和栈比较,栈是一种先进后出的线性表,而队列是一种先进先出 (first in first out,缩写 FIFO) 的线性表.
#2. 它只允许在表的一端进行插入,而在另一端删除元素。
#3. 在队列中插入的一端为队尾(rear),允许删除的一端为队头(front)。
这里我们实现队列的顺序存储,
实现ADT中基本操作
Status InitQueue(SqQueueP &SQ)
Status QueueEmpty(SqQueueP SQ) Status EnQueue(SqQueueP &SQ,ElemType e)
ElemType DeQueue(SqQueueP &SQ) Status QueueTraverse(SqQueueP SQ){
实现如下
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define Error 0
#define OVERFLOW -2
#define True 1
#define False 0
#define MAX_SIZE 15
typedef int Status; //函数运行结束状态值
typedef struct{
int x;
}Node;
typedef Node * ElemType;
typedef struct{
ElemType elem[MAX_SIZE];
int size;
}SqQueue,*SqQueueP;
Status InitQueue(SqQueueP &SQ){
SQ = (SqQueue*)malloc(sizeof(SqQueue));
SQ->size = 0;
return OK;
}
Status QueueEmpty(SqQueueP SQ){
if(SQ->size==0) return True;
return False;
}
Status EnQueue(SqQueueP &SQ,ElemType e){
SQ->elem[SQ->size] =e;
SQ->size++;
return OK;
}
ElemType DeQueue(SqQueueP &SQ){
ElemType e;
if(SQ->size > 0){
e = SQ->elem[0];
for(int i = 0; i < SQ->size-1; i++){
SQ->elem[i] = SQ->elem[i+1];
}
SQ->size--;
}
return e;
}
Status QueueTraverse(SqQueueP SQ){
for(int i = 0; i < SQ->size; i++){
if(SQ->elem[i]) printf("%d",SQ->elem[i]->x);
else printf("NULL");
}
return OK;
}
int main() {
SqQueueP sq;
InitQueue(sq);
Node *pn1 = NULL;
Node *pn2 = (Node *)malloc(sizeof(Node));
pn2->x = 1;
EnQueue(sq,pn1);
EnQueue(sq,pn2);
EnQueue(sq,pn1);
EnQueue(sq,pn2);
EnQueue(sq,pn1);
EnQueue(sq,pn2);
while(!QueueEmpty(sq)){
Node *temppn = DeQueue(sq);
if(temppn) printf(" %d ",temppn->x);
else printf("NULL");
}
free(pn2);
return 0;
}