棧是先進后出,隊列則是先進先出.下面貼一下隊列的基本操作.
### 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;
}
~~~