数据结构学习之特殊线性表 队列

顺序基本定义
typedef 100 maxsize;
typedef int elemtype;
elemtype item[maxsize];
int front;
int rear;
结构定义
#define maxsize 100;
typedef int elemtype;
struct qnode{
	elemtype num[maxsize];
	int front ,rear;
};
struct qnode queue;
链式结构
struct qhead
{
	struct qnode *front;
	struct qnode *rear;
};
struct qnode ;
{
	struct qnode *next;
	elemtype data;
};
一、队列的顺序初始化
initq (struct qnode queue)
{
	queue.front=0;
	queue.rear=0;
}
2.置空队列
clear(struct qnode queue)
{
	queue.front=0;
	queue.rear=0;
}
3.判断队列是否为空
int emptyq(struct qnode queue)
{
	if(queue.front==queue.rear)
		return (1);
	else
		return (0);
}
4.队列满运算
int fullq(struct qnode queue)
{
	return (queue.rear==maxsize);
}
5.求队列长度
int lengthq(struct qnode queue)
{
	return(queue.rear-queue.front);
}
6.数据元素入队
void insertq(struct qnode queue,elemtype k)
{
	if(fullq(queue)))
		printf("overflow");
	else 
		queue.num[queue.rear]=k;
		queue.rear++;
}
7.数据元素出队
elemtype deleteq(struct qnode queue)
{
	int k;
	if(emptyq(queue))
	{
		printf("underfolw");
		return(0);
	}
	else 
	{
		k=queue.num[queue.front]
		queue.front ++;
		return (k);
	}
}
二、队列的链式存储
1.初始化链队
struct qhead *initq(struct qhead *p)
{
	p->front =NULL;
	p->rear=NULL;
}
2.置空链表
同初始化一样
3.判断链表为空
int emptyq(struct qhead *p)
{
	return(p->front==NULL);
}
4.元素k入队
在链队尾插入一个数据域为k的结点
struct qhead *insertq(struct qhead *p,elemtype k)
{
	struct qnode *q,q;
	q=(struct qnode *) malloc(sizeof(struct qnode));
	q.data=k;
	q.next=NULL;
	if(emptyq(p))
	{
		p->front=q;
		p->rear=q;
	}
	else
	{q0=p->rear;
		q0->next=q;
	p->rear=q;}
}
5.数据元素出链队
elemtype deletq(struct qnode *p)
{
	struct qnode *q;
	if (emptyq(p))
		printf("underflow\n")
	;else{
		q=p->front;
		p->front =q->next;
		free(q);
	}
}
循环队列

 

你可能感兴趣的:(C)