当前位置 博文首页 > Inmaturity_7的博客:408计算机考研--数据结构--队列学习(C语言

    Inmaturity_7的博客:408计算机考研--数据结构--队列学习(C语言

    作者:[db:作者] 时间:2021-07-16 21:46

    队列学习(C语言)

    一、队列的顺序存储方式

    #include<stdio.h>
    #include<stdlib.h>
    #define MaxSize 10
    
    typedef struct SqQueue{
    	int data[MaxSize];//存储队列数据 
    	int front,rear;//队头,队尾指针 
    }SqQueue; 
    //初始化队列 
    void Init_SqQueue(SqQueue &Q){
    	Q.front=Q.rear=0;
    }
    //判队空
    bool is_Empty(SqQueue Q){
    	if(Q.front==Q.rear){
    		return true;
    	}
    	return false;
    } 
    //入队
    bool EnQueue(SqQueue &Q,int 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,int &x){
    	if(is_Empty(Q)){//判队空 
    		return false;
    	}
    	x=Q.data[Q.front];
    	Q.front=(Q.front+1)%MaxSize;//头指针后移
    	return true; 
    } 
    
    int main(){
    	SqQueue q;
    	Init_SqQueue(q);
    	printf("当前队列是否为空:%d\n",is_Empty(q));
    	//测试入队
    	EnQueue(q,1);
    	EnQueue(q,2);
    	EnQueue(q,3);
    	EnQueue(q,4);
    	EnQueue(q,5);
    	
    	//测试出队
    	int x1,x2,x3,x4,x5;
    	DeQueue(q,x1);
    	DeQueue(q,x2);
    	DeQueue(q,x3);
    	DeQueue(q,x4);
    	DeQueue(q,x5);
    	
    	printf("%d %d %d %d %d\n",x1,x2,x3,x4,x5);
    }
    

    二、队列的链式存储结构

    带头结点的队列
    #include<stdio.h>
    #include<stdlib.h>
    #define MaxSize 10
    
    //链表 
    typedef struct LinkNode{
    	int val;//数据域
    	struct LinkNode *next;//指针域 
    }LinkNode,*LinkedList;
    //链式存储队列 
    typedef struct LinkedQueue{
    	LinkedList front,rear;
    }LinkedQueue;
    
    //初始化队列 
    void Init_LinkedQueue(LinkedQueue &q){
    	q.front=q.rear=(LinkedList)malloc(sizeof(LinkNode));//建立队头和队尾
    	q.front->next=NULL; 
    }
    //判队空
    bool is_Empty(LinkedQueue &q){
    	if(q.front==q.rear){
    		return true; 
    	} 
    	return false;
    } 
    //入队
    void EnQueue(LinkedQueue &q,int x){
    	LinkedList newNode=(LinkedList)malloc(sizeof(LinkNode));//新结点
    	newNode->val=x;
    	newNode->next=NULL;
    	//插入新结点 
    	q.rear->next=newNode;
    	q.rear=newNode;
    	return;
    } 
    //出队
    bool DeQueue(LinkedQueue &q,int &x){
    	if(is_Empty(q)){
    		return false;
    	}
    	//获取被删结点 
    	LinkedList p=q.front->next;
    	x=p->val;
    	//删除结点 
    	q.front->next=p->next;
    	if(q.rear==p){
    		q.rear=q.front; 
    	}
    	free(p);
    	return true;
    }
    int main(){
    	//新建带头结点队列测试 
    	LinkedQueue q;
    	Init_LinkedQueue(q);
    	//测试入队
    	EnQueue(q,1);
    	EnQueue(q,2);
    	EnQueue(q,3);
    	EnQueue(q,4);
    	EnQueue(q,5);
    	
    	//测试出队
    	int x1,x2,x3,x4,x5;
    	DeQueue(q,x1);
    	DeQueue(q,x2);
    	DeQueue(q,x3);
    	DeQueue(q,x4);
    	DeQueue(q,x5);
    	
    	printf("%d %d %d %d %d\n",x1,x2,x3,x4,x5);
    }
    
    cs