链式队列的简单实现,注释我就不写了.
queue.h
#ifndef QUEUE_H
#define QUEUE_H 1
typedef int INT32;
typedef unsigned int UINT32;
typedef unsigned char UCHAR8;
typedef char CHAR8;
typedef long long int LONG64;
typedef unsigned long long int ULONG64;
typedef double DOUBLE64;
typedef float FLOAT32;
struct Node
{
INT32 data;
struct Node *next;
};
typedef struct Node *Pnode;
struct Link //指向头和尾
{
Pnode head;
Pnode tail;
};
typedef struct Link *Plink;
Plink Create();
INT32 Empty(Plink q);
void Push(Plink q,INT32 data);
void Pop(Plink q);
INT32 Front(Plink q);
#endif
queue.c
#include<stdio.h>
#include<stdlib.h>
#include"queue.h"
Plink Create()
{
Plink head = (Plink)malloc(sizeof(struct Link));
head->head = NULL;
head->tail = NULL;
return head;
}
void Push(Plink q,INT32 data)
{
Pnode temp = (Pnode)malloc(sizeof(struct Node));
temp->data = data;
temp->next = NULL;
if(q->tail == NULL)
{
q->head = temp;
q->tail = temp;
}
else
{
q->tail->next = temp;
q->tail = temp;
}
}
void Pop(Plink q)
{
Pnode temp = q->head;
if(Empty(q) == 1)
{
printf("队列为空\n");
return;
}
q->head = q->head->next;
free(temp);
}
INT32 Front(Plink q)
{
return q->head->data;
}
INT32 Empty(Plink q)
{
return q->head == NULL;
}
main.c
#include<stdio.h>
#include"queue.h"
int main()
{
Plink q = Create();
int n;
printf("输入测试序列:\n");
while(scanf("%d",&n) != EOF)
{
Push(q,n);
}
while(Empty(q) != 1)
{
printf("%d ",Front(q));
Pop(q);
}
printf("\n");
return 0;
}