一.目录:
1.队的认识和分类;
2.如何定义顺序队的结构体;
3.顺序队的基本操作实现;
4.顺序队的完整代码;
5.循环队列的基本操作实现;
6.循环队列的完整代码;
7.链式队的基本操作实现;
二:队的认识和分类:
和栈相反,队列是一种先进先出的线性表。它只允许在表的一端进行插入,而在另一端删除元素。
这和我们排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一端叫做队尾,允
许删除的一端则称为队头。
与栈不同,队不仅可以分为链式队,顺序队,还有一种循环队。
三.定义队的结构体:
和顺序栈相类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,还需要附设两个指针front和rear分别指向头元素和尾元素的位置。
typedef struct node
{
int *base; //存放数据
int rear; //尾指针
int front; //头指针
}sqqueue;
初始化时,rear=front=0;在非空队列中,头指针始终指向队列头元素,尾指针始终指向队列尾元素的下一位。
四.顺序队的基本操作:
1.头文件:
#include<stdio.h>
#include<stdlib.h>
#define max 10
#define up 10
2.结构体定义:
typedef struct node
{
int *base;
int rear;
int front;
}sqqueue;
这里的rear和front虽然定义的是整型的,但是这里当作指针用。
3.顺序队的初始化:
sqqueue *listcreat()
{
sqqueue *list;
list->base=(int *)malloc(max*sizeof(int));
list->rear=list->front=0;
return list;
}
4.判断队空和队满:
int ementype(sqqueue *list)//判断队空
{
if(list->rear==list->front)
{
return 1;
}
else
return 0;
}
int emen(sqqueue *list)//判断队满
{
if(list->rear-list->front==max)
{
return 1;