假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。试设计相应的入队和出队算法。C语言实现
时间: 2024-04-30 17:06:47 浏览: 101
假设以带头结点的循环链表表示一个队列,并且只设一个队尾指针指向尾元素结点(注意不设头指针),试写出相应的置空队、入队、出队的算法 (Java)
算法如下:
// 声明循环链表结点的结构体
typedef struct Node
{
int data; // 数据域
struct Node *next; // 指针域
}Node;
// 声明指向队尾结点的指针变量
Node *rear=NULL;
// 入队算法
void Enqueue(int x)
{
Node *p=(Node *)malloc(sizeof(Node)); // 动态分配结点空间
p->data=x;
if(rear==NULL) // 队列为空
{
rear=p;
p->next=p;
}
else // 队列不空
{
p->next=rear->next;
rear->next=p;
rear=p;
}
}
// 出队算法
int Dequeue()
{
if(rear==NULL) // 队列为空
{
printf("队列为空,无法出队!\n");
return -1; // 返回错误代码
}
else if(rear->next==rear) // 队列中只有一个元素
{
int x=rear->data;
free(rear);
rear=NULL;
return x;
}
else // 队列中有多个元素
{
Node *p=rear->next;
int x=p->data;
rear->next=p->next;
free(p);
return x;
}
}
// 测试程序
int main()
{
Enqueue(1);
Enqueue(2);
Enqueue(3);
Enqueue(4);
printf("%d ",Dequeue
阅读全文