数据结构的一些讲解,供学习者参考,也顺带作为复习
栈是一种先进后出的数据结构,在实际问题上,还有另外一种先进先出的数据结构:即插入在表一端进行,删除在表的另一端进行,我们将这种数据结构称为队列或简称“队”,把允许插入的一端叫队尾(rear),把允许删除的那一端叫队头(front)。如图所示是一个有5个元素的队列。入队顺序依次为a1、a2、a3、a4、a5。出队顺序也依然是a1、a2、a3、a4、a5。
队列上的基本运算有:
(1)队列初始化 *Init_LQueue();
(2)入队操作In_LQueue(LQueue *q,int x);
(3)出队操作Out_LQueue(LQueue *q,int *x);
(4)取队头元素操作Read_LQueue(LQueue *q,int *x);
(5)判空队操作Empty_LQueue(LQueue *q);
(1)队列初始化 *Init_LQueue();
LQueue *Init_LQueue()
{
LQueue *q;;
QNode *p;
q=(LQueue *)malloc(sizeof(LQueue));
p=(QNode *)malloc(sizeof(QNode));
p->next=NULL;
q->front=p;
q->rear=p;
return q;
}
(2)入队操作In_LQueue(LQueue *q,int x)
void In_LQueue(LQueue *q,int x)
{
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
p->data=x;
p->next=NULL;
q->rear->next=p;
q->rear=p;
printf("入队成功!\n");
}
(3)出队操作Out_LQueue(LQueue *q,int *x)
int Out_LQueue(LQueue *q,int *x)
{
QNode *p;
if(Empty_LQueue(q))
{
printf("队空,无法出队!\n");
return 0;
}
else
{
p=q->front->next;
q->front->next=p->next;
*x=p->data;
free(p);
if(q->front->next==NULL)
q->rear=q->front;
return 1;
}
}
(4)取队头元素操作Read_LQueue(LQueue *q,int *x)
int Read_LQueue(LQueue *q,int *x)
{
QNode *p;
if(Empty_LQueue(q))
{
printf("队空,无法读取!\n");
return 0;
}
else
{
p=q->front->next;
*x=p->data;
return 1;
}
}
(5)判空队操作Empty_LQueue(LQueue *q)
int Empty_LQueue(LQueue *q)
{
if(q->front==q->rear)
return 1;
else
return 0;
}
主函数实现
void main()
{
LQueue *Lqueue;
int model,item;
Lqueue=Init_LQueue();
printf("队列已初始化!\n");
while(1)
{
printf("请选择你需要的操作:\n");
printf("【1】入队\n【2】出队\n【3】读队头元素\n【4】退出程序\n");
printf("请输入: ");
scanf("%d",&model);
switch(model)
{
case 1:
while(1)
{
printf("请输入入队元素: ");
scanf("%d",&item);
if(item==0)
break;
In_LQueue(Lqueue,item);
}
break;
case 2:
Out_LQueue(Lqueue,&item);
printf("队头元素 %3d 已出队!\n",item);
break;
case 3:
Read_LQueue(Lqueue,&item);
printf("队头元素为 %3d \n",item);
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
}
需要源代码的欢迎下载,免积分,共同学习,家下来每天都会分享一篇,持续一个星期
点击此处免积分下载,共同学习,欢迎指正