数据机构(链队)
数据机构(链队)
数据结构教程(第6版)118页实验4
主函数
//
// Created by Snow on 2023/3/14.
//
#include"liqueue.cpp"
int main()
{
int choice;
LiQueue *q=nullptr;
PrintCommand();
while(1)
{
printf("\n请输入下一个操作:\n");
scanf("%d",&choice);
Choice(q,choice);
}
}
实现函数
//
// Created by Snow on 2023/3/14.
//
#include<cstdio>
#include<windows.h>
typedef char ElemType;
typedef struct qnode{
ElemType data;
struct qnode *next;
}DataNode;
typedef struct
{
DataNode *front;
DataNode *rear;
}LiQueue;
//打印菜单
void PrintCommand()
{
printf(" 欢迎使用链队操作系统\n\n");
printf("1.初始化链队q 2.判断链队q是否非空\n");
printf("3.依次进链队元素a,b,c 4.出队一个元素,输出该元素\n");
printf("5.依次进链队元素d,e,f 6.输出出队序列\n");
printf("7.释放链队 0.结束程序\n");
}
bool InitQueue(LiQueue *&q)
{
if(q!=nullptr)
{
printf("链队已存在!\n");
return false;
}
q=(LiQueue *)malloc(sizeof(LiQueue));
if(q==nullptr)
{
printf("链队初始化失败!\n");
return false;
}
q->front=q->rear=nullptr;
return true;
}
bool DestroyQueue(LiQueue *&q)
{
if(q==nullptr)
{
printf("链队不存在!\n");
return false;
}
DataNode *pre=q->front,*p;
if(pre!=nullptr)
{
p=pre->next;
while(p!=nullptr)
{
free(pre);
pre=p;
p=p->next;
}
free(pre);
}
free(q);
return true;
}
bool QueueEmpty(LiQueue *q)
{
if(q==nullptr)
{
printf("链队不存在!\n");
return false;
}
if(q->rear==nullptr)printf("空队!\n");
else printf("已储存数据!\n");
return true;
}
bool enQueue(LiQueue *&q,ElemType e)
{
if(q==nullptr)
{
printf("链队不存在!\n");
return false;
}
DataNode *p;
p=(DataNode *)malloc(sizeof(DataNode));
p->data=e;
p->next=nullptr;
if(q->rear==nullptr)
q->front=q->rear=p;
else
{
q->rear->next=p;
q->rear=p;
}
return true;
}
bool deQueue(LiQueue *&q,ElemType &e)
{
if(q==nullptr)
{
printf("链队不存在!\n");
return false;
}
if(q->rear==nullptr)
return false;
DataNode *r;
r=q->front;
if(q->rear==q->front)
q->rear=q->front=nullptr;
else
q->front=r->next;
e=r->data;
free(r);
return true;
}
bool disQueue(LiQueue *q)
{
if(q==nullptr)
{
printf("链队不存在!\n");
return false;
}
DataNode *p=q->front;
while(p!=nullptr)
{
printf("%c ",p->data);
p=p->next;
}
printf("\n");
return true;
}
//选择操作
bool Choice(LiQueue *&q, int i)
{
bool OK;
ElemType e,arr[]={'a','b','c'};ElemType str[]={'d','e','f','\0'};
int j;
switch(i)
{
case 1:
OK=InitQueue(q);
if(OK)printf("初始化操作成功!\n");
else printf("初始化操作失败!\n");
break;
case 2:
OK=QueueEmpty(q);
if(OK)printf("判断队空操作成功!\n");
else printf("判断队空操作失败!\n");
break;
case 3:
for(j=0;arr[j]!='\0';j++)
{
OK= enQueue(q,arr[j]);
if(OK)printf("进队操作成功!\n");
else printf("进队操作失败!\n");
}
break;
case 4:
OK=deQueue(q,e);
if(OK)
{
printf("出队元素为%c\n",e);
printf("元素出队操作成功!\n");
}
else printf("元素出队操作失败!\n");
break;
case 5:
for(j=0;str[j]!='\0';j++)
{
OK= enQueue(q,str[j]);
if(OK)printf("进队操作成功!\n");
else printf("进队操作失败!\n");
}
break;
case 6:
OK=disQueue(q);
if(OK)printf("输出出队操作成功!\n");
else printf("输出出队操作失败!\n");
break;
case 7:
OK= DestroyQueue(q);
if(OK)printf("销毁队列操作成功!\n");
else printf("销毁队列操作失败!\n");
break;
case 0:
printf("感谢使用!下次再见!\n");
system("pause");
exit(0);
default:printf("指令错误,请再尝试一次\n");
}
}
GBK编码

浙公网安备 33010602011771号