一、實驗內容
1.采用順序存盤實作回圈佇列的初始化、入隊、出隊操作,
2.采用鏈式存盤實作佇列的初始化、入隊、出隊操作,
3.撰寫一個程式,使用兩個鏈隊q1和q2,用來分別存盤由計算機隨機產生的20個100以內的奇數和偶數,然后每行輸出q1和q2的一個值,即奇數和偶數配對輸出,直到任一佇列為空為止,
順序存盤
代碼實作:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 //最大佇列長度
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int front,rear; //隊頭、隊尾
}SqQueue;
int InitQueue(SqQueue **Q)//初始化回圈佇列
{
*Q=(SqQueue*)malloc(sizeof(SqQueue));
if(!(*Q))return 0;
(*Q)->front=(*Q)->rear=0;
return 1;
}
int QueueEmpty(SqQueue Q)//判斷隊空
{
return Q.front==Q.rear;
}
int QueueFull(SqQueue Q)//判斷隊滿
{
return (Q.rear+1)%MAXSIZE==Q.front;
}
int EnQueue(SqQueue *Q, ElemType e)//入隊操作
{
if(QueueFull(*Q))return 0;
Q->data[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXSIZE;
return 1;
}
int DeQueue (SqQueue *Q, ElemType *e)//出隊操作
{
if(QueueEmpty(*Q))return 0;
*e=Q->data[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return 1;
}
int main()
{
SqQueue *Q;int i;
InitQueue(&Q);
EnQueue(Q,99);
EnQueue(Q,6);
EnQueue(Q,74);
EnQueue(Q,56);
EnQueue(Q,100);
while(!QueueEmpty(*Q)){
DeQueue(Q,&i);
printf("%d ",i);
}
printf("\n");
return 0;
}
程式演示:


鏈式存盤:
代碼實作:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAXSIZE 100 //最大佇列長度
typedef int ElemType;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int InitQueue(LinkQueue *Q)//將Q初始化為一個空的鏈佇列
{
Q->front=Q->rear=(QNode*)malloc(sizeof(QNode));
if(!Q->front)return 0;
Q->front->next=NULL;
return 1;
}
int QueueEmpty(LinkQueue Q)//判斷隊空
{
return Q.front==Q.rear;
}
int EnQueue(LinkQueue *Q, ElemType e)//入隊操作
{
QNode *p=(QNode*)malloc(sizeof(QNode));
if(!p)return 0;
p->data=e;
Q->rear->next=p;
Q->rear=p;
return 1;
}
int DeQueue(LinkQueue *Q,ElemType *e)//出隊操作
{
QNode *p;
if(QueueEmpty(*Q))return 0;
p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if(Q->rear==p)Q->rear=Q->front;
free(p);
return 1;
}
int main()
{
LinkQueue q1,q2;
int i=0,j=0,num;
InitQueue(&q1);
InitQueue(&q2);
srand((unsigned)time(NULL));
while(i<20||j<20){
num=rand()%100+1;
if(num%2==0&&i<20){
EnQueue(&q1,num);
i++;
}
if(num%2!=0&&j<20){
EnQueue(&q2,num);
j++;
}
}
while(!QueueEmpty(q1)&&!QueueEmpty(q2)){
DeQueue(&q1,&i);
DeQueue(&q2,&j);
printf("%3d%3d\n",i,j);
}
return 0;
}
程式演示:

分析:佇列程式需要判斷隊空,在順序存盤中用結構體專門定義兩個個資料域存放隊頭和隊尾元素的下標,鏈式存盤中則直接定義隊頭隊尾指標.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/241839.html
標籤:其他
