大纲
- 创建链式队列。
- 完成插入,删除,查看,清空等功能。
- 具体实现,完工。
图片示例展示
代码纯文本示例展示
#include<stdio.h>
#include<stdlib.h>
typedef struct QNode
{
int data;
struct QNode* next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int Init(LinkQueue& Q)
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if (!Q.front)
{
printf("ERROR");
return 0;
}
Q.front->next = NULL;
return 1;
}
int Insert(LinkQueue& Q, int e) //添加元素
{
QNode* p;
p = (QueuePtr)malloc(sizeof(QNode));
if (!p)
{
printf("ERROR!");
return 0;
}
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return 1;
}
int Show(LinkQueue& Q) //显示元素
{
if (Q.front == NULL)
{
printf("队列为空!\n");
return 0;
}
QNode* p = Q.front->next;
printf("队列中已有数据为:\n");
while (p != NULL)
{
printf("%d%c", p->data,p->next==NULL?'\n':' '); //三目运算符
p = p->next;
}
return 1;
}
int Delete(LinkQueue& Q, int e) //删除元素
{
QNode* p;
if (Q.front == Q.rear)
{
printf("队列为空!\n");
return 0;
}
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
free(p);
return 1;
}
int CleaerEvery(LinkQueue& Q) //清空队列释放所有元素
{
if (Q.front == NULL)
{
printf("队列为空!\n");
return 0;
}
while (Q.front != NULL) //不为空则继续查找
{
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear; //赋予新的值
}
return 1;
}
int LengthNode(LinkQueue& Q) //队列长度
{
if (Q.front==NULL)
{
printf("队列为空!\n");
return 0;
}
int a=0;
QNode* b=Q.front->next;
while (b!=NULL)
{
a++;
b = b->next;
}
printf("\n此时队列的长度是:%d\n", a);
return 1;
}
void GoHome() //结束程序
{
printf("即将关闭程序!");
exit(1);
}
int main()
{
int a, s;
LinkQueue Q;
Init(Q);
printf("注意:5.为清空队列,6.为显示队列长度\n");
while (1) {
printf("---\n1.添加元素,2.释放元素,3.查看所有元素,4.关闭程序,请选择:");
scanf_s("%d", &a);
switch (a)
{
case 1:
printf("请输入元素号:");
scanf_s("%d", &s);
Insert(Q, s);
break;
case 2:
Delete(Q, s);
break;
case 3:
Show(Q);
break;
case 4:
GoHome();
break;
case 5:
CleaerEvery(Q);
break;
case 6:
LengthNode(Q);
break;
default:
printf("请重新选择!\n");
break;
}
}
return 0;
}
运行效果展示
End
int LengthNode(LinkQueue& Q)
{
…
}
和
int LengthNode(LinkQueue* Q)
{
…
}
的不同。
勿忘~
~