早教吧作业答案频道 -->其他-->
简单数据结构问题,在线等,急!在具有n个单元的顺序存储循环队列中,假定front和rear分别是队头指针和队尾指针,请判断对空的条件,给出元素x入队操作的语句?
题目详情
简单数据结构问题,在线等,急!
在具有n个单元的顺序存储循环队列中,假定front和rear分别是队头指针和队尾指针,请判断对空的条件,给出元素x入队操作的语句?
在具有n个单元的顺序存储循环队列中,假定front和rear分别是队头指针和队尾指针,请判断对空的条件,给出元素x入队操作的语句?
▼优质解答
答案和解析
/* 顺序队 */
#include "stdio.h"
#include "stdlib.h"
typedef char datatype;
typedef struct QNode{
datatype data;
struct QNode *next;
}QType; //链队结点类型
typedef struct{
QType *front; //指向单链表队头结点
QType *rear; //指向单链表队尾结点
}LinkQueue;
void InitQueue(SqQueue *q){ //初始化队列
q->rear=q->front=NULL;
}
int Enqueue(SqQueue *q, datatype x)
{
QType *s;
s=(QType *)malloc(sizeof(QType));
s->data=x;
s->next=NULL;
if(q->front==NULL&&q->rear==NULL) //若为空队,直接插入
q->rear=q->front=s;
else{
q->rear->next=s; //不是空队列,则在队尾插入
q->rear=s; //修改队尾指针
}
}
int DeQueue(SqQueue *s, datatype *x){ //出对运算算法
QType *p;
if(q->front==NULL&&q->rear==NULL) //若为空队
return 0;
p=q->front;
*x=p->data;
if(q->rear==q->front) //队列只有一个结点
q->rear=q->front=NULL;
free(p);
return 1;
}
int GetHead(SqQueue *q, datatype *x){ //取对头元素运算方法
if(q->front==NULL&&q->rear==NULL) //若为空队
return 0;
*x=q->front->data; //取队头元素
return 1;
}
int QueueEmpty(SqQueue q){ //判断是否为空
if(q->front==NULL&&q->rear==NULL) //空队
return 1;
else
return 0;
}
void Traversal_SqQueue(SqQueue q){ //遍历
QType *p;
if(q->front==NULL&&q->rear==NULL) //空队
printf("此队列目前是空队\n");
else
while
printf("%c",q.data[q.front]);
}
printf("\n");
}
void main()
{SqQueue sq; int i=0;datatype a[]="abcdefghijklmn", c;
InitQueue(&sq);
while(a[i])
{if(!(Enqueue(&sq,a[i])))
printf("入队失败.\n");
i++;}
printf("队列的初始状态为:\n");
Traversal_SqQueue(sq);
if(!(DeQueue(&sq, &c)))
printf("出队失败.\n");
else
printf("%c出队后,队列为:\n",c);
Traversal_SqQueue(sq);
c='f';
{if(!(Enqueue(&sq,c)))
printf("入队失败.\n");
else
printf("%c入队后,队列为:\n",c);
Traversal_SqQueue(sq);
if(!(DeQueue(&sq,&c)))
printf("出队失败\n");
else
printf("%c出队后,队列为:\n", c);
Traversal_SqQueue(sq);}
if(!(GetHead(&sq, &c)))
printf("队空.\n");
else
printf("取队头元素%c后,队列为:\n",c);
Traversal_SqQueue(sq);
}
#include "stdio.h"
#include "stdlib.h"
typedef char datatype;
typedef struct QNode{
datatype data;
struct QNode *next;
}QType; //链队结点类型
typedef struct{
QType *front; //指向单链表队头结点
QType *rear; //指向单链表队尾结点
}LinkQueue;
void InitQueue(SqQueue *q){ //初始化队列
q->rear=q->front=NULL;
}
int Enqueue(SqQueue *q, datatype x)
{
QType *s;
s=(QType *)malloc(sizeof(QType));
s->data=x;
s->next=NULL;
if(q->front==NULL&&q->rear==NULL) //若为空队,直接插入
q->rear=q->front=s;
else{
q->rear->next=s; //不是空队列,则在队尾插入
q->rear=s; //修改队尾指针
}
}
int DeQueue(SqQueue *s, datatype *x){ //出对运算算法
QType *p;
if(q->front==NULL&&q->rear==NULL) //若为空队
return 0;
p=q->front;
*x=p->data;
if(q->rear==q->front) //队列只有一个结点
q->rear=q->front=NULL;
free(p);
return 1;
}
int GetHead(SqQueue *q, datatype *x){ //取对头元素运算方法
if(q->front==NULL&&q->rear==NULL) //若为空队
return 0;
*x=q->front->data; //取队头元素
return 1;
}
int QueueEmpty(SqQueue q){ //判断是否为空
if(q->front==NULL&&q->rear==NULL) //空队
return 1;
else
return 0;
}
void Traversal_SqQueue(SqQueue q){ //遍历
QType *p;
if(q->front==NULL&&q->rear==NULL) //空队
printf("此队列目前是空队\n");
else
while
printf("%c",q.data[q.front]);
}
printf("\n");
}
void main()
{SqQueue sq; int i=0;datatype a[]="abcdefghijklmn", c;
InitQueue(&sq);
while(a[i])
{if(!(Enqueue(&sq,a[i])))
printf("入队失败.\n");
i++;}
printf("队列的初始状态为:\n");
Traversal_SqQueue(sq);
if(!(DeQueue(&sq, &c)))
printf("出队失败.\n");
else
printf("%c出队后,队列为:\n",c);
Traversal_SqQueue(sq);
c='f';
{if(!(Enqueue(&sq,c)))
printf("入队失败.\n");
else
printf("%c入队后,队列为:\n",c);
Traversal_SqQueue(sq);
if(!(DeQueue(&sq,&c)))
printf("出队失败\n");
else
printf("%c出队后,队列为:\n", c);
Traversal_SqQueue(sq);}
if(!(GetHead(&sq, &c)))
printf("队空.\n");
else
printf("取队头元素%c后,队列为:\n",c);
Traversal_SqQueue(sq);
}
看了 简单数据结构问题,在线等,急...的网友还看了以下:
CH2=C=O双聚可得B,B是含有一个O原子的四原子环状结构物质B可与C2H5OH,NH3,C6H 2020-04-25 …
设NA为阿伏伽德罗常数的数值,下列说法正确的是()A.常温常压下,18gH2O含有2NA个O-H键 2020-05-14 …
概率问题求详解.过程.某单位有15人,其中A型血的人有3个,B型血的人有3个,AB型血的人有6个, 2020-06-02 …
两个乘数末尾一共有2个O,积的末尾一定也是2个o.() 2020-06-03 …
有额外分1如图所示,已知线段AE是三角形ABC绕点O旋转后AB的对应线段,请做出旋转后的三角形DE 2020-06-09 …
2molH2O有几个H,含有多个O 2020-06-12 …
有十个O组成一个三角形上面四个O,三个O,二个O,底下一个O,请问移动3个球,怎样使整个图形倒过来 2020-06-25 …
为什么1mol/L的BaCl2溶液中Cl离子的浓度为2mol/L?而分子总数为NA的NO2和CO2 2020-07-03 …
有20颗五角星要放在9格的正方形中,中间格不放,要使每边有6颗星,应该怎样放向左途中有16个O放在 2020-07-06 …
potato、tomato这两个单词中都有两个O,第一个O是开音节吗还是闭音节? 2020-07-08 …