一、顺序队列基本概念
队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行。插入的那端称为队尾,删除的那段称为队首,队列的插入和删除操作简称进队和出队。
顺序队列的基本存储结构:
#define Maxsize 100 typedef int datatype; typedef struct{ datatype a[Maxsize]; int front; int rear; }sequence_queue;
二、顺序队列的操作集合
//void init(sequence_queue *sq) //int empty(sequence_queue sq) //datatype get(sequence_queue sq) //void insert(sequence_queue *sq,datatype x) //void dele(sequence_queue *sq) //void print(sequence_queue sq)
三、顺序队列的代码实现
初始化顺序队列
/*****************************/ /* 函数名:init */ /* 函数功能:初始化队列 */ /* 函数参数:sq顺序队列指针 */ /* 函数返回值:null */ /****************************/ void init(sequence_queue *sq) { sq->front=sq->rear=0; }
判断顺序队列是否为空
/*******************************/ /* 函数名:empty */ /* 函数功能:判断队列是否为空 */ /* 函数参数:sq顺序队列 */ /* 函数返回值:int。1空 0非空 */ /*******************************/ int empty(sequence_queue sq) { return(sq.front==sq.rear?1:0); }
获取顺序队列队首值
/*****************************/ /* 函数名:get */ /* 函数功能:获取队列队首值 */ /* 函数参数:sq顺序队列 */ /* 函数返回值:datatype。 */ /*****************************/ datatype get(sequence_queue sq) { if(empty(sq)){ printf("顺序队列为空,无法获取队首值!\n"); exit(1); } return sq.a[sq.front]; }
插入(入队)操作
/*******************************/ /* 函数名:insert */ /* 函数功能:插入(入队)操作 */ /* 函数参数:sq顺序队列指针 */ /* x插入值 */ /* 函数返回值:null */ /*******************************/ void insert(sequence_queue *sq,datatype x) {if(sq->rear==Maxsize){ printf("队列已满,无法插入!\n"); exit(1); } sq->a[sq->rear]=x; sq->rear++; }
删除(出队)操作
/*******************************/ /* 函数名:dele */ /* 函数功能:删除(出队)操作 */ /* 函数参数:sq顺序队列指针 */ /* 函数返回值:null */ /*******************************/ void dele(sequence_queue *sq) {if(sq->front==sq->rear){ printf("队列为空,无法删除!\n"); exit(1); } sq->front++; }
打印顺序队列
/**************************/ /* 函数名:print */ /* 函数功能:打印队列 */ /* 函数参数:sq顺序队列 */ /* 函数返回值:null */ /**************************/ void print(sequence_queue sq) { int i; if(empty(sq)) printf("队列为空,无法打印!\n"); else{ for(i=sq.front;i<sq.rear;i++) printf("%d ",sq.a[i]); printf("\n"); } }
四、循环队列
为了有效利用空间,将顺序存储队列看作一个圆环,队尾和队首是相连的。
即:(rear+1)%Maxsize = front
循环队列的插入(入队)
/*******************************/ /* 函数名:insert_c */ /* 函数功能:插入(入队)操作 */ /* 函数参数:sq顺序队列指针 */ /* x插入值 */ /* 函数返回值:null */ /******************************/ void insert_c(sequence_queue *sq,datatype x) { if((sq->rear+1)%Maxsize==sq->front){ printf("队列已满,无法插入!\n"); exit(1); } sq->a[sq->rear]=x; sq->rear=(sq->rear+1)%Maxsize; }
循环队列删除(出队)
/*****************************/ /* 函数名:dele_c */ /* 函数功能:删除(出队)操作 */ /* 函数参数:sq顺序队列指针 */ /* 函数返回值:null */ /****************************/ void dele_c(sequence_queue *sq) { if(sq->front==sq->rear){ printf("队列为空,无法删除!\n"); exit(1); } sq->front=(sq->front+1)%Maxsize; }
φ(゜▽゜*)♪ 感谢观看,希望对你有帮助!
标签:顺序,函数,sequence,队列,sq,queue,操作,rear From: https://www.cnblogs.com/yihong-song/p/16903634.html