通过定义一个包含节点(Node)的结构体和一个包含头尾指针的队列结构体来实现链式队列。
头文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Node {
int data;
struct Node* next;
}*node;
typedef struct Queue {
node front, rear;
}*queue;
extern void ini_queue(queue p);
extern int is_empty(queue p);
extern void in_queue(queue p, int value);
extern void out_queue(queue p);
extern void destroy_queue(queue p);
extern void get_front(queue p);
源文件
#include "Lk.h"
void ini_queue(queue p)
{
p->front = NULL;
p->rear = NULL;
}
int is_empty(queue p)
{
return (p->front == NULL)? 1 : 0;//empty 1
}
void in_queue(queue p, int value)
{
node q = (node)malloc(sizeof(Node));
q->next = NULL;
q->data = value;
if (is_empty(p))
{
p->front = q;
p->rear = q;
printf("%d 已入队\n", value);
}
else
{
p->rear->next = q;
p->rear = q;
printf("%d 已入队\n", value);
}
}
void out_queue(queue p)
{
if (is_empty(p))
{
printf("Error: Queue is empty.\n");
return;
}
else
{
node temp = p->front;
printf("%d 已出队\n", p->front->data);
p->front = p->front->next;
free(temp);
if (p->front == NULL)
p->rear = NULL;
}
}
void destroy_queue(queue p) {
while (!is_empty(p)) {
out_queue(p);
}
printf("销毁完毕\n");
}
void get_front(queue p)
{
if (is_empty(p))return;
else
{
printf("Front: %d", p->front->data);
}
}
main:
#include"Lk.h"
int main()
{
/*extern void ini_queue(queue p);
extern int is_empty(queue p);
extern void in_queue(queue p, int value);
extern void out_queue(queue p);
extern void destroy_queue(queue p);*/
clock_t start = clock();
queue p = (queue)malloc(sizeof(Queue));
ini_queue(p);
for (int i = 0; i < 99;i++)
in_queue(p, i);
for (int j = 0; j < 50; j++)
out_queue(p);
get_front(p);
clock_t end = clock();
double time_taken = ((double)(end - start)) / CLOCKS_PER_SEC;
printf("\n程序运行时间: %f 秒\n", time_taken);
destroy_queue(p);
return 0;
}