(1)定义存储整数的循环队列和链队列。 (2)编写初始化/创建、入队和出队操作的算法。 (3)设计菜单,以选择菜单方式进行操作,并实现上述算法。 (4)给岀运行结果。
时间: 2024-02-25 19:59:08 浏览: 19
1. 循环队列:循环队列是一种通过循环利用数组空间来实现队列的数据结构。循环队列需要两个指针,一个指向队头,一个指向队尾,并且队尾指针在达到数组末尾时需要循环回到数组开头。
定义循环队列:
```
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int front;
int rear;
} CircularQueue;
```
链队列:链队列是一种队列的链式存储结构,队列的每个元素都是一个结点,每个结点包含两个域,一个是数据域,一个是指针域,指针指向下一个结点。
定义链队列:
```
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct {
Node *front;
Node *rear;
} LinkedQueue;
```
2. 循环队列入队操作算法:
```
void EnQueue(CircularQueue *q, int x) {
if ((q->rear + 1) % MAXSIZE == q->front) {
printf("Queue is full\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
}
```
循环队列出队操作算法:
```
void DeQueue(CircularQueue *q, int *x) {
if (q->front == q->rear) {
printf("Queue is empty\n");
return;
}
*x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
}
```
链队列入队操作算法:
```
void EnQueue(LinkedQueue *q, int x) {
Node *new_node = (Node*) malloc(sizeof(Node));
new_node->data = x;
new_node->next = NULL;
q->rear->next = new_node;
q->rear = new_node;
}
```
链队列出队操作算法:
```
void DeQueue(LinkedQueue *q, int *x) {
if (q->front == NULL) {
printf("Queue is empty\n");
return;
}
Node *temp = q->front;
*x = temp->data;
q->front = temp->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(temp);
}
```
3. 以下是一个简单的菜单,用于选择菜单方式进行操作:
```
int main() {
int choice, x;
CircularQueue cq;
LinkedQueue lq;
cq.front = cq.rear = 0;
lq.front = lq.rear = NULL;
do {
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 element to insert: ");
scanf("%d", &x);
EnQueue(&cq, x);
EnQueue(&lq, x);
break;
case 2:
DeQueue(&cq, &x);
printf("Deleted element is %d\n", x);
DeQueue(&lq, &x);
printf("Deleted element is %d\n", x);
break;
case 3:
printf("Exiting program\n");
break;
default:
printf("Invalid choice\n");
break;
}
} while (choice != 3);
return 0;
}
```
4. 运行结果:
```
1. EnQueue
2. DeQueue
3. Exit
Enter your choice: 1
Enter element to insert: 2
1. EnQueue
2. DeQueue
3. Exit
Enter your choice: 1
Enter element to insert: 4
1. EnQueue
2. DeQueue
3. Exit
Enter your choice: 2
Deleted element is 2
Deleted element is 2
1. EnQueue
2. DeQueue
3. Exit
Enter your choice: 2
Queue is empty
Deleted element is 0
1. EnQueue
2. DeQueue
3. Exit
Enter your choice: 3
Exiting program
```