#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);
}
}
void QueuePrintf(struct Queue* queue)
{
struct Node* loc;
loc=queue->front;
while(loc)
{
printf("<-%d",loc->data);
loc=loc->next;
}
}
void menu(struct Queue queue)
{
while(1) {
int z , x;
printf("1.=====插入 2.=====弹出\n");
printf("3.=====遍历 4.=====销毁\n");
printf("5.=====得到头元素 6.=====是否为空\n");
printf("7.=====长度\n");
printf("——————请输入操作序号——————\n");
scanf("%d" , &z);
switch (z)
{
case 1:
printf("----请输入要插入的元素.\n");
scanf("%d" , &x);
QueuePush(&queue, x);
printf("\n");
break;
case 2:
if(QueuePop(&queue, &x))printf("----%d 已经被弹出队列.\n" , x);
else printf("----队列已空.\n");
printf("\n");
break;
case 3:
QueuePrintf(&queue);
printf("\n");
printf("\n");
break;
case 4:
QueueDestroy(&queue);
printf("----已经销毁.\n");
printf("\n");
break;
case 5:
printf("----头元素为:%d\n" , queue.front -> data);printf("\n");
break;
case 6:
if(QueueEmpty(&queue)) printf("----为空\n");
else printf("----不为空--\n");
printf("\n");
break;
case 7:
printf("----当前长度为:%d\n" , queue.size);printf("\n");
break;
default:
printf("----请输入正常的操作序号\n");printf("\n");
menu(queue);
break;
}
}
}
int main(void)
{
struct Queue queue;
QueueInit(&queue);
menu(queue);
return 0;
}
数据结构作业 队列
最新推荐文章于 2024-07-12 16:27:59 发布