title: 队列的基本操作 mathjax: true date: 2021-10-28 20:53:24 tags: “数据结构作业” description: wls队列的基本操作
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
struct Node
{
int data;
struct Node* next;
};
struct Queue
{
struct Node* front;
struct Node* rear;
int size;
};
void QueueInit(struct Queue* queue)
{
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
}
int QueueEmpty(struct Queue* queue)
{
return (queue->size == 0);
}
void QueuePush(struct Queue* queue, const int data)
{
struct Node* node;
node = (struct Node*)malloc(sizeof(struct Node));
assert(node != NULL);
node->data = data;
node->next = NULL;
if(QueueEmpty(queue))
{
queue->front = node;
queue->rear = node;
}
else
{
queue->rear->next = node;
queue->rear = node;
}
++queue->size;
}
int QueuePop(struct Queue* queue, int* data)
{
if (QueueEmpty(queue))
{
return 0;
}
struct Node* tmp = queue->front;
*data = queue->front->data;
queue->front = queue->front->next;
free(tmp);
--queue->size;
return 1;
}
void QueueDestroy(struct Queue* queue)
{
struct Node* tmp;
while(queue->front)
{
tmp = queue->front;
queue->front = queue->front->next;
free(tmp);
}
}
int _deplay(struct Queue queue)
{
if (queue.size == 0) {
return 0;
}
struct Node *p = queue.front;
while(p)
{
printf("%d " , p -> data);
p = p -> next;
}
printf("\n");
return 1;
}
void deplay(struct Queue queue)
{
if (_deplay(queue) == 0 )
{
printf("队列为空.\n");
return ;
}
else {
printf("遍历结束.\n");
}
}
void menu(struct Queue queue)
{
while(1) {
int op , x;
printf("1.插入 2.弹出\n");
printf("3.遍历 4.销毁\n");
printf("5.得到头元素 6.是否为空\n");
printf("7.长度\n");
printf("请输入操作序号:");
scanf("%d" , &op);
switch (op)
{
case 1:
printf("请输入您要插入的元素.\n");
scanf("%d" , &x);
QueuePush(&queue, x);
break;
case 2:
if(QueuePop(&queue, &x))printf("%d 已经被弹出队列.\n" , x);
else printf("队列已空.\n");
break;
case 3:
deplay(queue);
break;
case 4:
QueueDestroy(&queue);
printf("已经销毁.\n");
break;
case 5:
printf("头元素为:%d\n" , queue.front -> data);
break;
case 6:
if(QueueEmpty(&queue)) printf("为空\n");
else printf("不为空\n");
break;
case 7:
printf("当前长度为:%d\n" , queue.size);
break;
default:
printf("请输入正常的操作序号\n");
menu(queue);
break;
}
}
}
int main(void)
{
struct Queue queue;
QueueInit(&queue);
menu(queue);
return 0;
}
|