顺序基本定义
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);
}
}
循环队列