一、链队的结构定义
#define DataType int
typedef struct node{
DataType data;
struct node* next;
}Qnode, *PQnode;
typedef struct {
PQnode front, rear;
}LinkQueue, *PLinkQueue;
二、基本操作的实现
//初始化链队
PLinkQueue Init_LinkQueue() {
PLinkQueue Q;
Q = (PLinkQueue)malloc(sizeof(LinkQueue));
if (Q) {
Q->front = NULL;
Q->rear = NULL;
printf("初始化成功\n");
}
return Q;
}
//判空
int Empty_LinkQueue(PLinkQueue Q) {
if (Q && Q->front == NULL && Q->rear == NULL)
return 1; //队空
return 0; //队不空
}
//入队
int In_LinkQueue(PLinkQueue Q, DataType x) {
PQnode p;
p = (PQnode)malloc(sizeof(Qnode));
if (!p)
return 0; //失败
p->data = x;
p->next = NULL;
if (Empty_LinkQueue(Q)) {
Q->front = p;
Q->rear = p;
}
else {
Q->rear->next = p;
Q->rear = p;
}
return 1; //成功
}
//出队
int Out_LinkQueue(PLinkQueue Q, DataType* x) {
PQnode tmp;
if (Empty_LinkQueue(Q))
return 0; //失败
*x = Q->front->data;
tmp = Q->front;
Q->front = tmp->next;
free(tmp);
tmp = NULL;
if (Q->front == NULL)
Q->rear = NULL;
return 1; //成功
}
//读对头元素
int Front_LinkQueue(PLinkQueue Q, DataType* x) {
if (Empty_LinkQueue(Q))
return 0; //队空
*x = Q->front->data;
return 1; //成功
}
//销毁队列
void Destroy_LinkQueue(PLinkQueue* Q) {
PQnode tmp = NULL;
if (*Q) {
while ((*Q)->front) {
tmp = (*Q)->front;
(*Q)->front = (*Q)->front->next;
free(tmp);
tmp = NULL;
}
free(*Q);
*Q = NULL;
printf("销毁成功\n");
}
}
//显示所有元素
void Show_LinkQueue(PLinkQueue Q) {
PQnode p;
p = Q->front;
printf("队中元素有:\n");
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
三、测试代码
int main() {
int x;
PLinkQueue Q;
Q = Init_LinkQueue();
if (Empty_LinkQueue(Q))
printf("队空\n");
else
printf("队不空\n");
for (int i = 0; i < 5; i++) {
if (In_LinkQueue(Q, i)) {
printf("入队成功,入队元素为:%d\n", i);
}
}
Show_LinkQueue(Q);
if (Empty_LinkQueue(Q))
printf("队空\n");
else
printf("队不空\n");
if (Out_LinkQueue(Q, &x)) {
printf("出对成功,出队元素为:%d\n", x);
}
Show_LinkQueue(Q);
if (Front_LinkQueue(Q, &x)) {
printf("队头元素为:%d\n", x);
}
Destroy_LinkQueue(&Q);
return 0;
}
四、测试结果