C语言实现队列的顺序存储

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/lin1094201572/article/details/86072513