顺序循环队列
seqqueue.h
#ifndef __SEQQUEUE_H__
#define __SEQQUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 10
typedef struct NODE{
int data[MAX];
int head;
int tail;
}seqqueue;
seqqueue* seqqueue_create();
void seqqueue_in(seqqueue*Q,int value);
int seqqueue_out(seqqueue*Q);
#endif
seqqueue.c
#include "seqqueue.h"
#define MAX 10
seqqueue* seqqueue_create()
{
seqqueue*Q =NULL;
Q = (seqqueue*)malloc(sizeof(seqqueue));
Q->head = 0%MAX;
Q->tail = -1%MAX;
}
void seqqueue_in(seqqueue*Q,int value)
{
Q->tail +=1;
Q->tail = Q->tail%MAX;
Q->data[Q->tail] = value;
}
int seqqueue_out(seqqueue*Q)
{
int value = Q->data[Q->head];
Q->head += 1;
Q->head = Q->head%MAX;
return value;
}
seqqueue_test.c
#include "seqqueue.h"
void main()
{
seqqueue*Q = seqqueue_create();
printf("\n入循环队列10,20...120,循环队列空间10\n");
seqqueue_in(Q,10);
seqqueue_in(Q,20);
seqqueue_in(Q,30);
seqqueue_in(Q,40);
seqqueue_in(Q,50);
seqqueue_in(Q,60);
seqqueue_in(Q,70);
seqqueue_in(Q,80);
seqqueue_in(Q,90);
seqqueue_in(Q,100);
seqqueue_in(Q,110);
seqqueue_in(Q,120);
printf("\n出循环队列:\n");
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
printf("%d\t",seqqueue_out(Q));
}
Makefile
seqqueue_text:seqqueue.o seqqueue_text.c
gcc seqqueue.o seqqueue_text.c -o seqqueue_text
seqqueue.o:seqqueue.c seqqueue.h
gcc seqqueue.c -c -o seqqueue.o
.PHONY:clean
clean:
rm -rf seqqueue.o seqqueue_text
运行结果
入循环队列10,20...120,循环队列空间10
出循环队列:
110 120 30 40 50 60 70 80 90 100
链式队列
listqueue.h
#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct NODE{
int data;
struct NODE*next;
}listqueue_node;
typedef struct LNODE{
listqueue_node* head;
listqueue_node* tail;
}listqueue_t;
listqueue_t* listqueue_create(void);
void listqueue_in(listqueue_t*LQ,int value);
int listqueue_out(listqueue_t*LQ);
#endif
listqueue.c
#include "listqueue.h"
listqueue_t* listqueue_create(void)
{
listqueue_t*LQ = NULL;
LQ = (listqueue_t*)malloc(sizeof(listqueue_t));
LQ->tail = (listqueue_node*)malloc(sizeof(listqueue_node));
LQ->head = (listqueue_node*)malloc(sizeof(listqueue_node));
LQ->tail->next = NULL;
LQ->head->next = LQ->tail;
return LQ;
}
void listqueue_in(listqueue_t*LQ,int value)
{
listqueue_node *P;
P = (listqueue_node*)malloc(sizeof(listqueue_node));
P->data = value;
LQ->tail->next = P;
LQ->tail = P;
}
int listqueue_out(listqueue_t*LQ)
{
int value;
listqueue_node *P = LQ->head;
LQ->head = LQ->head->next;
P->next=NULL;
value = P->data;
free(P);
return value;
}
listqueue_test.c
#include "listqueue.h"
void main()
{
listqueue_t *LQ;
int P;
LQ = listqueue_create();
listqueue_in(LQ,10);
listqueue_in(LQ,20);
listqueue_in(LQ,30);
listqueue_in(LQ,40);
listqueue_in(LQ,50);
printf("%d\t",listqueue_out(LQ));
printf("%d\t",listqueue_out(LQ));
printf("%d\t",listqueue_out(LQ));
printf("%d\t",listqueue_out(LQ));
printf("%d\t",listqueue_out(LQ));
printf("%d\t",listqueue_out(LQ));
printf("%d\t",listqueue_out(LQ));
}
Makefile
listqueue_text:listqueue.o listqueue_text.c
gcc -g listqueue.o listqueue_text.c -o listqueue_text
listqueue.o:listqueue.c listqueue.h
gcc -g listqueue.c -c -o listqueue.o
.PHONY:clean
clean:
rm -rf listqueue.o listqueue_text
执行结果
root@ubuntu:/home/yqj/desktop/链式队列# ./listqueue_text
0 0 10 20 30 40 50