问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用循环单链表实现循环队列,写出插入,和删除的算法,只要这两个函数的算法就行了,有头尾指针。

发布网友 发布时间:2022-04-22 18:04

我来回答

2个回答

热心网友 时间:2022-04-22 19:34

先写个循环链表的实现
然后 C++ 用继承
C就组合吧,下面写个C的实现
typedef struct CircleListNode{
Datatype d;
struct CircleList *pre,*nxt;
}*CircleList,CirListNode;

typedef struct

{
CircleList Head;
int num;
}CircleQueue;

void insertFront(CircleList *L,d);

{
if(!L)return NULL;
if(*L==NULL)
{
*L=(CircleList) malloc(sizeof(CirListNode));
*L->nxt= *L->pre=*L ;
*L->d=d;
}
else
{

CircleList p =(CircleList) malloc(sizeof(CirListNode));
p->nxt=*L;
p->pre=*L->pre;
*L->pre->nxt=p;
*L->pre=p;
*L=p;
}
}
void DeleteBack(CircleList *L)
{ CircleList r=*L->pre;
if(*L->nxt =*L){ free(*L);*L=NULL;return ;}

r->pre->nxt =*L;
*L->pre=r->pre;

free(r);

}

void InsertQueue(CircleQueue *que, Datatype d)
{
if(!que)return;
insertFront(&que->Head,d);
que->num ++;

}
void DeletQueue(CircleQueue *que)
{
if(que->num>0)
{
DeleteBack(&que->Head);
que->num--;
}
}

void InitQueue(CircleQueue *que)
{
if(!que)return;
que->Head=NULL;
que->num=0;
}

Datatype * GetBackData(const CircleQueue *que)
{
if(!que)return NULL;
if(!que->Head)return NULL;
if(que->num<=0)return NULL;
return &(que->Head->pre->d);
}

void ClearQueue(CircleQueue *que)
{
if(!que)return ;
while(que->num>0)
{
DeletQueue(que);
}
}

热心网友 时间:2022-04-22 20:52

/**************************************************************************************
*函数名称:insert
*函数功能:在链表中插入元素.
*输入:head 链表头指针,p新元素插入位置,x 新元素中的数据域内容
*返回值:无
*************************************************************************************/
void insert(Node * head,int p,int x){
Node * tmp = head;
//for循环是为了防止插入位置超出了链表长度
for(int i = 0;i<p;i++)
{
if(tmp == NULL)
return ;
if(i<p-1)
tmp = tmp->next;
}
Node * tmp2 = new Node;
tmp2->data = x;
tmp2->next = tmp->next;
tmp->next = tmp2;
}
/**************************************************************************************
*函数名称:del
*函数功能:删除链表中的元素
*输入:head 链表头指针,p 被删除元素位置
*返回值:被删除元素中的数据域.如果删除失败返回-1
**************************************************************************************/
int del(Node * head,int p){
Node * tmp = head;
for(int i = 0;i<p;i++)
{
if(tmp == NULL)
return -1;
if(i<p-1)
tmp = tmp->next;
}
int ret = tmp->next->data;
tmp->next = tmp->next->next;
return ret;
}追问我说的是循环队列不是链表,循环队列的链式结构。循环队列只在表头删除,表尾插入。

追答① 置队空
void InitQueue(CirQueue *Q)
{
Q->front=Q->rear=0;
Q->count=0; //计数器置0
}
② 判队空
int QueueEmpty(CirQueue *Q)
{
return Q->count==0; //队列无元素为空
}
③ 判队满
int QueueFull(CirQueue *Q)
{
return Q->count==QueueSize; //队中元素个数等于QueueSize时队满
}
④ 入队
void EnQueue(CirQueuq *Q,DataType x)
{
if(QueueFull(Q))
Error("Queue overflow"); //队满上溢
Q->count ++; //队列元素个数加1
Q->data[Q->rear]=x; //新元素插入队尾
Q->rear=(Q->rear+1)%QueueSize; //循环意义下将尾指针加1
⑤ 出队
DataType DeQueue(CirQueue *Q)
{
DataType temp;
if(QueueEmpty(Q))
Error("Queue underflow"); //队空下溢
temp=Q->data[Q->front];
Q->count--; //队列元素个数减1
Q->front=(Q->front+1)%QueueSize; //循环意义下的头指针加1
return temp;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
有什么好玩且免费的游戏吗??? 有什么游戏比较好玩免费耐玩的吗? 寻找一个真正免费休闲的游戏?不要征途那样的 这几天因为喝酒吃烧烤弄得痔疮犯了,想去看,请问在包头较好治疗的医院... 最近因为工作的原因弄得痔疮犯了,想去看,请问在包头哪里治疗较好?_百度... 现在在包头,这几天因为喝酒弄得痔疮犯了,想去看,请问在哪家医院好?_百 ... 包头痔疮做手术要多少钱 包头痔疮手术需要多少费用 申玉菲那么有钱,为什么还住地下室? 中华英才网工作靠谱吗? 生活帮智能锁多少钱呢 请大家写出名人通过努力获得成功的2个事例! 别人开了我的车撞了人保险怎么理赔 开别人车怎么报保险 开别人的车报保险需要什么证件 用凸透镜观察远处景物成像情况 1979年9月20日子时出生的运程 农历79年9月20日亥时出生的人运气怎么样 一个人想太多了该怎么办? 属猴的女一九八零年九月二十日生一运势怎样? 天蝎女2015年9月20日运势 每日星座【2018年9月20日】运势怎么样? 咱是9月20号出生的,求个星座运势 1977年农历9月20日卯时出生的人一生运势如何? 艾诚的财经评论员 1992年阴历9月20 子时 男人一生运势如何 谁是中国最权威的财经评论员 叶檀有啥本事? 9月20日,是什么星座?本月运程如何??? 凸透镜成的像是什么? 选购智能锁需要注意什么? 为什么智能锁反应没有用户注册 刚洗完的葡萄就放入密封的保鲜盒里一晚上会不会坏掉阿 网店诈骗支付宝实名认证 法人代表,微信实名认证,视频见过人为什么还证明不了,是他本人? 技嘉的GTX460和英伟达的Geforce GTX460有什么区别。 GTX460支持DX11么 最初糖果的糖取自什么? 技嘉GTX460 1G显卡游戏死机问题 技嘉GTX460显卡,技嘉GTX460显卡 这块显卡上面带了两个电源插座,把原包装盒的电源引线插入变成了四个插口 微信服务号认证时看到有三个认证方式,支付验证、微信认证、法人代表验证,前两个都需要交钱,第三个法人 最初“糖果”的糖是取自 A甜菜 B蜂蜜 C甘蔗 技嘉P31DS3L主板可以配GTX460吗? 最初与&quot;马上&quot;这个词有关的人是谁?_2,最初&quot;糖果&quot;的糖取自哪里?_3,科学家道尔顿 技嘉460显卡怎么样呢?很少看人测评,现在微星460 1G跟技嘉一样的价钱,该选谁呢? 想问问我的主板和显卡能一起用吗 需要更新BIOS吗 我的是gtx460 GA-78LMT-S2 我的显卡是技嘉的GTX4601G 问题怎么解决 个人以法人身份认证微信公众号效果是否和企业认证一样? 技嘉GTX460 1G 索泰GTX460 1G 我要选择哪个 gtx460显卡怎么安装 刻录软件哪个好用功能多?