用c语言给出全部代码和注释算法设计:在一个循环链队中只有尾指针(记为 rear,结点结构为数据源data,指针域为next,没有头 结点),请给出这个队列的入队、出队实现过程并测 试。
时间: 2024-05-31 12:07:54 浏览: 107
数据结构算法-习题-答案-带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点注意不设头指针.docx
5星 · 资源好评率100%
算法设计:
1.定义结构体:
typedef struct node{
int data;
struct node* next;
}Node;
2.定义队列结构体:
typedef struct queue{
Node* rear;
}Queue;
3.初始化队列:
void InitializeQueue(Queue* q){
q->rear = NULL;
}
4.判断队列是否为空:
int IsEmpty(Queue* q){
if(q->rear == NULL)
return 1;
else
return 0;
}
5.入队操作:
void EnQueue(Queue* q, int data){
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
if(q->rear == NULL){//当队列为空时
q->rear = newNode;
newNode->next = q->rear;
}
else{//当队列不为空时
newNode->next = q->rear->next;
q->rear->next = newNode;
q->rear = newNode;
}
}
6.出队操作:
int DeQueue(Queue* q){
int data;
Node* front;
if(IsEmpty(q)){
printf("Queue is empty.\n");
return -1;
}
else{
front = q->rear->next;
data = front->data;
if(q->rear == front){//当队列只有一个元素时
q->rear = NULL;
}
else{
q->rear->next = front->next;
}
free(front);
return data;
}
}
7.测试:
int main(){
Queue q;
InitializeQueue(&q);
EnQueue(&q, 1);
EnQueue(&q, 2);
EnQueue(&q, 3);
EnQueue(&q, 4);
printf("%d ", DeQueue(&q));
printf("%d ", DeQueue(&q));
printf("%d ", DeQueue(&q));
printf("%d ", DeQueue(&q));
return 0;
}
完整代码:
阅读全文