資料結構之佇列的基本操作
阿新 • • 發佈:2018-12-13
本文章包括了佇列的初始化,插入元素,刪除元素等
- 佇列結構體的建立
typedef struct
{
ElemType *base;//佇列儲存元素,也可用陣列代替
int front;//佇列頭部
int rear;//佇列尾部
}SqQueue;
- 佇列的初始化
void Init_Queue(SqQueue *q) { q->base=(ElemType *)malloc(MAX_QUEUE_SIZE*sizeof(ElemType)); if(!q->base)//判斷是否還有儲存空間 exit (0); q->front=q->rear=0;//將隊尾和隊頭都指向0處使其初始化 }
- 入隊
int Insert_Queue(SqQueue *q,ElemType e)
{
if((q->rear+1)%MAX_QUEUE_SIZE==q->front)//判斷此佇列是否已滿
return ERROR;
q->base[q->rear]=e;//將所插入的元素賦值給隊尾所指處
q->rear=(q->rear+1)%MAX_QUEUE_SIZE;//將隊尾後移
return OK;
}
- 出隊
int Delete_Queue(SqQueue *q,ElemType *e) { if(q->rear==q->front)//判斷當前佇列是否為空 return ERROR; *e=q->base[q->front];//將所要出隊的那個元素取出 q->front=(q->front)%MAX_QUEUE_SIZE;//隊頭後移 return OK; }
- 簡單的入隊和出隊操作
#include <stdio.h> #include <stdlib.h> #define MAX_QUEUE_SIZE 10 #define OK 0 #define ERROR -1 typedef char ElemType; typedef struct { ElemType *base; int front; int rear; }SqQueue; void Init_Queue(SqQueue *q) { q->base=(ElemType *)malloc(MAX_QUEUE_SIZE*sizeof(ElemType)); if(!q->base) exit (0); q->front=q->rear=0; } int Insert_Queue(SqQueue *q,ElemType e) { if((q->rear+1)%MAX_QUEUE_SIZE==q->front) return ERROR; q->base[q->rear]=e; q->rear=(q->rear+1)%MAX_QUEUE_SIZE; return OK; } int Delete_Queue(SqQueue *q,ElemType *e) { if(q->rear==q->front) return ERROR; *e=q->base[q->front]; q->front=(q->front)%MAX_QUEUE_SIZE; return OK; } void Print_Queue(SqQueue *q)//輸出函式 { int p; printf("OUTPUT Queue: \n"); p=q->front; while(p!=q->rear) { printf("%d :%c ",p,q->base[p]); p=(p+1)%MAX_QUEUE_SIZE; } printf("\n"); } int main() { int flag=1; ElemType x; SqQueue q; Init_Queue(&q); while(flag) { printf("In :1; OUT :2; END :0\n");//1代表入隊;2代表出隊;0代表結束操作 scanf("%d",&flag); getchar(); if(flag==1) { printf("In:"); scanf("%c",&x); getchar(); if(Insert_Queue(&q,x)==ERROR) printf("ERROR\n"); /*else Print_Queue(&q);*/ } else if(flag==2) { if(Delete_Queue(&q,&x)==ERROR) printf("ERROR\n"); else Print_Queue(&q); } else if(flag==0) break; } return 0; }
- 執行結果如下: