求助一个循环链表队列的代码
假设以带头点的循环链表表示队列,链表长度为n,只设一个指针指向队尾元素节点,不设头指针,试编写相应的队列初始化、入队和出队的算法;实现要求:
1、输入循环链表长度n;
2、入队m个元素;
3、打印队列中所有元素;
4、出队k个元素;
5、打印队列中的元素;
6、销毁队列。
输入:
8
6
1 2 3 4 5 6
3
输出:
1 2 3 4 5 6
4 5 6
我查了网上的一些代码,感觉都不合适,不能自由输入元素,我写不出来QAQ /*
//静态队列
struct Queue
{
int *pBase;
int front;//头
int rear;//尾
};
void init(struct Queue *pQ)
{
pQ->pBase=(int *)malloc(sizeof(int)*6);
pQ->front=0;
pQ->rear=pQ->front;
}
int is_full(struct Queue *pQ)
{
//一个队列有6个格子只存5个数,最后一个格子不存
if((pQ->rear+1)%6==pQ->front)
{
return 1;
}
else
{
return 0;
}
}
int is_empty(struct Queue *pQ)
{
if(pQ->front==pQ->rear)
{
return 1;
}
else
{
return 0;
}
}
int en_Queue(struct Queue *pQ,int val)
{
if(is_full(pQ))
{
printf("队列已满\n");
}
else
{
pQ->pBase=val;
pQ->rear=(pQ->rear+1)%6;
}
return 1;
}
int out_Queue(struct Queue *pQ,int *pval)
{
if(is_empty(pQ))
{
printf("队列为空\n");
}
else
{
//先保存元素
*pval=pQ->pBase;
//front+1
pQ->front=(pQ->front+1)%6;
}
}
void travel_Queue(struct Queue *pQ)
{
int i=pQ->front;
while(i!=pQ->rear)
{
printf("%d ",pQ->pBase);
i=(i+1)%6;
//不能将i写成pQ->front这样会改变队列
}
printf("\n");
}
int main(void)
{
struct Queue Q;
int val;
init(&Q);
en_Queue(&Q,1);
en_Queue(&Q,2);
en_Queue(&Q,3);
en_Queue(&Q,4);
en_Queue(&Q,5);
en_Queue(&Q,6);
if(out_Queue(&Q,&val))
{
printf("出列元素为%d\n",val);
}
else
{
printf("出队失败\n");
}
travel_Queue(&Q);
return 0;
}
*/
前段时间写的,你稍微改一下,改成不是静态的就好了。然后没有销毁队列(全部出列应该算吧,用for循环好了)。输入长度也可以改成动态的,差不多这样吧,没想太多 pythonsrj 发表于 2019-10-20 20:40
前段时间写的,你稍微改一下,改成不是静态的就好了。然后没有销毁队列(全部出列应该算吧,用for循环好了) ...
我其实是想找一个能自由输入元素的,我一直卡在这里QAQ 哥哥你这个不能输入啊
页:
[1]