链队列 & 循环队列

链队列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;
}
发布了44 篇原创文章 · 获赞 0 · 访问量 828

猜你喜欢

转载自blog.csdn.net/Komatsu_1137/article/details/104081979