1)这里我复习下我以前搞混的一个点:
//该语句的含义是,创建的是名为:front的Node结构体指针并赋予初始值NULL(空),名为:rear的Node结构体指针并赋予初始值NULL(空)。
//该语句的含义是,为结构体node别名Node,下文中Node ⇔ struct node。并没有创建结构变量。
2)用链表实现队的一些注意事项和说明:
3)实现代码:
#include<stdlib.h>
#include<stdio.h>
typedef struct node
{
int data;
struct node *next;
}Node;
typedef struct queuepointer
{
Node *front;
Node *rear;
}Queuepointer;
void EnQueue(Queuepointer *Q,int x)
{
Node *tem =(Node *)malloc(sizeof(Node));
if(tem == NULL)
printf("Queue is full\n");
else
{
tem->data = x;
tem->next = NULL;
if(Q->front == NULL)//If in the queue is no node
Q->front = Q->rear = tem;
else//Exist queue then add node at the queue's end
{
Q->rear->next = tem;
Q->rear = tem;
}
}
}
int DeQueue(Queuepointer *Q)
{
int dequeue_data;
Node *con_p;
if(Q->front == NULL)
printf("Queue is Empty\n");
else
{
con_p = Q->front;
Q->front = Q->front->next;
dequeue_data = con_p->data;
free(con_p);
printf("Dequeue data:%d\n",dequeue_data);
return 1;
}
return -1;
}
void DisPlay(Queuepointer Q)
{
Node* tem = Q.front;
while(tem)
{
printf("[%d-]-",tem->data);
tem = tem->next;
}
printf("\n");
}
int main()
{
Queuepointer q1;
q1.front = q1.rear = NULL;//⚠️一定不要忘记初始化队,不然入队:Q->rear->next = tem;Q->rear->next 无法赋值
EnQueue(&q1,1);
EnQueue(&q1,2);
EnQueue(&q1,3);
EnQueue(&q1,4);
EnQueue(&q1,5);
EnQueue(&q1,6);
DisPlay(q1);
DeQueue(&q1);
DeQueue(&q1);
DeQueue(&q1);
DeQueue(&q1);
DeQueue(&q1);
DeQueue(&q1);
DeQueue(&q1);
return 1;
}