用c语言定义存储整数的循环队列和链队列。编写初始化创建、入队和出队操作的并用菜单实现。
循环队列的定义:
#define MAXSIZE 10
typedef struct {
int data[MAXSIZE];
int front;
int rear;
} SqQueue;
链队列的定义:
typedef struct QNode {
int data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
} LinkQueue;
初始化/创建操作:
// 循环队列初始化
void InitQueue(SqQueue *Q) {
Q->front = Q->rear = 0;
}
// 链队列初始化
void InitQueue(LinkQueue *Q) {
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q->front) {
exit(0);
}
Q->front->next = NULL;
}
入队操作:
// 循环队列入队
void EnQueue(SqQueue *Q, int x) {
if((Q->rear+1)%MAXSIZE == Q->front) {
printf("Queue is full!\n");
} else {
Q->data[Q->rear] = x;
Q->rear = (Q->rear+1)%MAXSIZE;
}
}
// 链队列入队
void EnQueue(LinkQueue *Q, int x) {
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p) {
exit(0);
}
p->data = x;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
出队操作:
// 循环队列出队
void DeQueue(SqQueue *Q, int *x) {
if(Q->front == Q->rear) {
printf("Queue is empty!\n");
} else {
*x = Q->data[Q->front];
Q->front = (Q->front+1)%MAXSIZE;
}
}
// 链队列出队
void DeQueue(LinkQueue *Q, int *x) {
if(Q->front == Q->rear) {
printf("Queue is empty!\n");
} else {
QueuePtr p = Q->front->next;
*x = p->data;
Q->front->next = p->next;
if(Q->rear == p) {
Q->rear = Q->front;
}
free(p);
}
}
菜单实现:
int main() {
int choice, x;
SqQueue sq;
LinkQueue lq;
InitQueue(&sq);
InitQueue(&lq);
while(1) {
printf("1. EnQueue\n");
printf("2. DeQueue\n");
printf("3. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch(choice) {
case 1:
printf("Enter the number to be added: ");
scanf("%d", &x);
EnQueue(&sq, x);
EnQueue(&lq, x);
break;
case 2:
DeQueue(&sq, &x);
printf("DeQueue: %d\n", x);
DeQueue(&lq, &x);
printf("DeQueue: %d\n", x);
break;
case 3:
exit(0);
break;
default:
printf("Invalid choice!\n");
break;
}
}
return 0;
}
``
原文地址: http://www.cveoy.top/t/topic/fERO 著作权归作者所有。请勿转载和采集!