数据结构(二)之顺序队列与链队列

  • 顺序队列

运用数组结构来构建的线性队列就是顺序队列。
本例实现了顺序队列的入队、出队、判断队空、初始化队列、打印队列等操作。

#include<iostream>
using namespace std;
const int m=1000;
struct queue{
	int data[m];
	int front;
	int rear;
};
void enqueue(queue &Q,int x);
int delqueue(queue &Q);
bool queueempty(queue Q);
void initqueue(queue &Q);
void printqueue(queue Q);
int main(){
	queue Q;
	/*以下是测试代码
	initqueue(Q);
	cout<<queueempty(Q)<<endl;
	enqueue(Q,1);
	enqueue(Q,2);
	printqueue(Q);
	cout<<delqueue(Q)<<endl;
	printqueue(Q);
	*/
	return 0;
}
void enqueue(queue &Q,int x){
	if((Q.rear+1)%m==Q.front) printf("队满\n");
	else{
		Q.data[Q.rear]=x;
		Q.rear=(Q.rear+1)%m;
	}
}
int delqueue(queue &Q){
	int x=Q.data[Q.front];
	Q.front=(Q.front+1)%m;
	return x;
}
bool queueempty(queue Q){
	if(Q.front==Q.rear) return true;
	else return false;
}
void initqueue(queue &Q){
	Q.front=0;
	Q.rear=Q.front;
}
void printqueue(queue Q){
	for(int i=Q.front;i!=Q.rear;i++){
		if(i>=m) i=i-m;
		printf("%d",Q.data[i]);
	}
	printf("\n");
}
  • 链队列

运用链式结构来构建的线性队列就是链队列。
本例实现了链队列的创建、出队、入队、打印队列、判断队空等操作。

#include<bits/stdc++.h>
using namespace std;
struct Node{    
    int Data;    
    struct Node *Next;    
};     
struct QNode{    
    struct Node *rear;    
    struct Node *front;    
};
typedef struct QNode *Queue;  
Queue CreateQueue();
int DeleteQ(Queue PtrQ); 
void InsertQ(int item,Queue PtrQ);
void Print(Queue PtrQ); 
bool IsEmpty(Queue Q);    
int main()    
{    
    /*以下是测试代码
    Queue PtrQ=CreateQueue();
    Print(PtrQ);
    InsertQ(1,PtrQ);
    InsertQ(2,PtrQ);
    InsertQ(3,PtrQ);
    Print(PtrQ);
    DeleteQ(PtrQ);
    Print(PtrQ);
    InsertQ(1,PtrQ);
    Print(PtrQ);
    DeleteQ(PtrQ);
    DeleteQ(PtrQ);
    DeleteQ(PtrQ);
    Print(PtrQ);
    */
    return 0;    
}    
Queue CreateQueue(){
	Queue PtrQ;  
    PtrQ=(Queue)malloc(sizeof(struct QNode));
	struct Node *rear;
	struct Node *front;
	rear =(Node*)malloc(sizeof(struct Node));
    rear=NULL;
    front =(Node*)malloc(sizeof(struct Node));
    front=NULL;
	PtrQ->front=front;
	PtrQ->rear=rear;
    return PtrQ;
};
int DeleteQ(Queue PtrQ){    
    struct Node *FrontCell;    
    int FrontElem;    
    if(IsEmpty(PtrQ)){    
        printf("队列空");    
        return 0;    
    }  
    FrontCell=PtrQ->front;  
    if(PtrQ->front==PtrQ->rear)  
       PtrQ->front=PtrQ->rear=NULL;  
    else{  
        PtrQ->front=PtrQ->front->Next;  
    }  
    FrontElem=FrontCell->Data;  
    free(FrontCell);  
    return FrontElem;    
}    
void InsertQ(int item,Queue PtrQ){  
    struct Node *FrontCell;  
    FrontCell=(Node*)malloc(sizeof(struct Node));
	FrontCell->Data=item;
	FrontCell->Next=NULL;
	if(IsEmpty(PtrQ)){
		PtrQ->front=FrontCell;
		PtrQ->rear=FrontCell;
	}
	else{
		PtrQ->rear->Next=FrontCell;
		PtrQ->rear=FrontCell;
	}
};   
void Print(Queue PtrQ) {      
    struct Node *Q1;      
    Q1 = PtrQ->front;      
    if (Q1 == NULL) {      
        printf("NULL\n");      
        return;      
    }      
    while (Q1 != PtrQ->rear) {      
        printf("%d ", Q1->Data);  
		Q1 =Q1->Next;      
    }  
    printf("%d", Q1->Data);  
    putchar('\n');      
}     
bool IsEmpty(Queue Q){
	 return(Q->front==NULL);  
}; 

猜你喜欢

转载自blog.csdn.net/m0_37650503/article/details/84434128