[数据结构]队列的基本操作
最后更新于:2022-04-01 15:56:20
栈是先进后出,队列则是先进先出.下面贴一下队列的基本操作.
### 1.队列的顺序表示.
#### 1.1队列的结构体定义
~~~
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
#define MAXNUM 20 /*队列中元素的最大个数*/
struct Seqqueue /*顺序队列类型定义*/
{
int f,r;
DataType q[MAXNUM];
};
typedef struct Seqqueue Seqqueue,*PSeqqueue;
/*创建一个空队列*/
PSeqqueue createEmptyqueue(void);
/*判断队列是否为空*/
int isEmptyqueue_seq(PSeqqueue paqu);
/*在队列中插入一个元素*/
void enqueue_seq(PSeqqueue paqu,DataType x);
/*删除队头元素*/
void dequeue_seq(PSeqqueue paqu);
/*对非空队列求队头元素*/
DataType frontqueue_seq(PSeqqueue paqu);
~~~
#### 1.2创建队列
~~~
PSeqqueue createEmptyqueue(){
PSeqqueue paqu=(PSeqqueue)malloc(sizeof(struct Seqqueue));
if (paqu==NULL)
{
printf("Out of space.\n");
}else{
paqu->r=paqu->f=0;
}
return paqu;
}
~~~
#### 1.3队列中插入元素
~~~
void enqueue_seq(PSeqqueue paqu,DataType x){
if ((paqu->r+1)%MAXNUM==paqu->f)
{
printf("Full queue.\n");
}else{
paqu->q[paqu->r]=x;
paqu->r=(paqu->r+1)%MAXNUM;
}
}
~~~
#### 1.4删除对头元素
~~~
void dequeue_seq(PSeqqueue paqu){
if (isEmptyqueue_seq(paqu))
{
printf("Empty queue\n");
}else{
paqu->f=(paqu->f+1)%MAXNUM;
}
}
~~~
#### 1.5返回对头元素
~~~
DataType frontqueue_seq(PSeqqueue paqu){
return paqu->q[paqu->f];
}
~~~
#### 1.6判断队列是否为空.
~~~
int isEmptyqueue_seq(PSeqqueue paqu){
return paqu->f=paqu->r;
}
~~~
#### 1.7测试
~~~
int main(){
PSeqqueue queue=createEmptyqueue();
enqueue_seq(queue,2);
enqueue_seq(queue,3);
enqueue_seq(queue,4);
printf("%d\n",frontqueue_seq(queue));
return 0;
}
~~~
###2.队列的链式表示
#### 2.1结构体定义和函数声明
~~~
#include <stdio.h>
#include <stdlib.h>
typedef int Datatype;
struct Node;
typedef struct Node *PNode;
struct Node
{
Datatype info;
PNode link;
};
struct LinkQueue
{
PNode f;
PNode r;
};
typedef struct LinkQueue *PLinkQueue;
//创建一个空队列
PLinkQueue createEmptyQueue_link();
//判断队列是否为空
int isEmptyQueue_link(PLinkQueue plqu);
//进队列
void enQueue_link(PLinkQueue plqu,Datatype x);
//出对列
void deQueue_link(PLinkQueue plqu);
//在非空队列中求对头元素
Datatype frontqueue_link(PLinkQueue plqu);
~~~
#### 2.2创建队列
~~~
PLinkQueue createEmptyQueue_link(){
PLinkQueue plqu=(PLinkQueue)malloc(sizeof(struct LinkQueue));
if (plqu==NULL)
{
printf("Out of space.\n");
}else{
// PNode pnode=(PNode)malloc(sizeof(struct Node));
plqu->f=plqu->r=NULL;
}
return plqu;
}
~~~
#### 2.3入队列
~~~
void enQueue_link(PLinkQueue plqu,Datatype x){
PNode pnode=(PNode)malloc(sizeof(struct Node));
if(pnode==NULL){
printf("Out of space.\n");
}else{
pnode->info=x;
pnode->link=NULL;
if (plqu->f==NULL)
{
plqu->f=pnode;
}else{
plqu->r->link=pnode;
}
plqu->r=pnode;
}
}
~~~
#### 2.4删除队尾元素
~~~
void deQueue_link(PLinkQueue plqu){
PNode pnode;
if (plqu->f==NULL)
{
printf("Empty Queue\n");
}else{
pnode=plqu->f;
plqu->f=plqu->f->link;
free(pnode);
}
}
~~~
#### 2.5返回对头元素
~~~
Datatype frontqueue_link(PLinkQueue plqu){
printf("%d\n",plqu->f->info);
return(plqu->f->info);
}
~~~
#### 2.6队列是否为空
~~~
int isEmptyQueue_link(PLinkQueue plqu){
return (plqu->f==NULL);
}
~~~
#### 2.7测试
~~~
int main(){
PLinkQueue p=createEmptyQueue_link();
enQueue_link(p,5);
enQueue_link(p,15);
enQueue_link(p,35);
frontqueue_link(p);
deQueue_link(p);
frontqueue_link(p);
return 0;
}
~~~