要有7个流程图
第一个流程图是元素入队操作的
第二个流程图是元素出队操作的
第三个是遍历队列的
第四个是获得队长的
第五个是获得队头的
第六个是退出操作的
第七个是程序整体的流程图
有些流程图可能非常短,但是还是请画一下
下列是程序源代码,C语言写的
#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) // 入队
{
struct Node* node;
int data;
node = (struct Node*)malloc(sizeof(struct Node));
assert(node != NULL);
printf("\n");
printf("请输入要入队的数:\n");
scanf("%d",&data);
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;
printf("\n");
printf("入队成功;\n");
}
void QueuePop(struct Queue* queue) // 出队
{
int data;
struct Node* tmp = queue->front;
if (QueueEmpty(queue))
{
printf("队空;\n");
return;
}
data = queue->front->data;
queue->front = queue->front->next;
free(tmp);
--queue->size;
printf("\n");
printf("%d 出队成功;\n",data);
return;
}
void QueueClear(struct Queue* queue) // 清空
{
struct Node* tmp;
while(queue->front)
{
tmp = queue->front;
queue->front = queue->front->next;
free(tmp);
}
}
void getFront(struct Queue* queue)
{ //得到头元素
if(QueueEmpty(queue))
{
printf("队空!!!\n");
return;
}
printf("队头为: %d\n",queue->front->data);
return;
}
void show(struct Queue* queue)
{ // 遍历
struct Node* temp = queue->front;
if(QueueEmpty(queue))
{
return;
}
while(temp != NULL)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("\n");
return;
}
int getLength(struct Queue* queue)
{ // 获得长度
int length = 0;
struct Node* temp = queue->front;
if(QueueEmpty(queue))
{
return 0;
}
while(temp != NULL){
length++;
temp = temp->next;
}
return length;
}
void menu()
{ // 菜单
printf("----------队列操作----------\n");
printf("-----1.入队\n");
printf("-----2.出队\n");
printf("-----3.遍历\n");
printf("-----4.长度\n");
printf("-----5.队头\n");
printf("-----6.退出\n");
printf("-----7.清空\n");
printf("请选择你要进行的操作:\n");
printf("\n");
return;
}
int main() // 主函数
{
struct Queue queue;
int flag = 1;
int choice;
int length = 0;
QueueInit(&queue);
while(flag)
{
printf("\n");
menu();
scanf("%d",&choice);
switch(choice)
{
case 1:
QueuePush(&queue);
break;
case 2:
QueuePop(&queue);
break;
case 3:
show(&queue);
break;
case 4:
length = getLength(&queue);
printf("长度为%d \n",length);
break;
case 5:
getFront(&queue);
break;
case 6:
flag = 0;
QueueClear(&queue);
printf("已退出~~\n");
break;
case 7:
QueueClear(&queue);
printf("已清空~~\n");
break;
default:
printf("输入有误;\n");
break;
}
}
printf("\n");
return 0;
}