链队列c语言实现:
#include <stdio.h>
#include <stdlib.h>
typedef int Status;
typedef int ElemType;
typedef struct QNode {
ElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//初始化链队列
Status Init_Queue(LinkQueue &Q) {
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q.front) return 0;
Q.front->next = NULL;
return 1;
}
//插入
Status Insert_Queue(LinkQueue &Q, ElemType e) {
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p) return 0;
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return 1;
}
//删除
Status Delete_Queue(LinkQueue &Q, ElemType &e) {
if(Q.front == Q.rear) return 0;
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p) Q.rear = Q.front;
free(p);
return 1;
}
//遍历
Status Traverse_Queue(LinkQueue &Q) {
QueuePtr p = Q.front->next;
while(p) {
printf("%d ", p->data);
p = p->next;
}
return 1;
}
//取队头元素
Status Get_Queue(LinkQueue &Q, ElemType &e) {
if(Q.front == Q.rear) return 0;
e = Q.front->next->data;
return 1;
}
int main(void) {
LinkQueue Q;
Init_Queue(Q);
Insert_Queue(Q, 2);
Insert_Queue(Q, 3);
Insert_Queue(Q, 4);
Insert_Queue(Q, 5);
Traverse_Queue(Q);
ElemType e;
Get_Queue(Q, e);
printf("%d", e);
return 0;
}
循环队列c语言实现:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5
typedef int ElemType;
typedef int Status;
typedef struct {
ElemType *base;
int front;
int rear;
}SqQueue;
//初始化循环队列
Status Init_SqQueue(SqQueue &Q) {
Q.base = (ElemType*)malloc(MAXSIZE * sizeof(ElemType));
if(!Q.base) return 0;
Q.front = Q.rear = 0;
return 1;
}
//输出队列长度
int Queue_Length(SqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
//插入
Status EnQueue(SqQueue &Q, ElemType e) {
if((Q.rear + 1) % MAXSIZE == Q.front) return 0;
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXSIZE;
return 1;
}
//删除
Status DeQueue(SqQueue &Q, ElemType &e) {
if(Q.rear == Q.front) return 0;
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
return 1;
}
//遍历
Status Traverse_Queue(SqQueue Q) {
int i = Q.front;
while(i != Q.rear) {
printf("%d ", Q.base[i]);
i = (i + 1) % MAXSIZE;
}
return 1;
}
int main(void) {
SqQueue Q;
Init_SqQueue(Q);
EnQueue(Q, 2);
EnQueue(Q, 3);
EnQueue(Q, 4);
Traverse_Queue(Q);
printf("\n");
ElemType e;
DeQueue(Q, e);
DeQueue(Q, e);
EnQueue(Q, 5);
EnQueue(Q, 6);
EnQueue(Q, 7);
Traverse_Queue(Q);
return 0;
}