データ構造(C言語版)---第3章スタックとキュー3.4.2キューのチェーン表現と実現(ループキュー)

13967 ワード

これはループキューの実装であり,列と配列の2章については,暇があれば見て,次は木を学習する.
ソースコードは次のとおりです.
#include <stdio.h>

#include <stdlib.h>



#define MAXQSIZE 8



typedef int QElemType ;



typedef struct

{

    QElemType *base;

    int front;

    int rear;



}SqQueue;



int InitSqQueue(SqQueue *S)

{

    S->base = (QElemType *)malloc(sizeof(QElemType)*MAXQSIZE);



    printf("Init %p
",S->base); if(!S->base) { exit(0); } S->front = S->rear = 0; return 1; } int InsertQueue(SqQueue *S, QElemType e) { if((S->rear + 1)%MAXQSIZE == S->front) { printf("full e: %d !!!
",e); int temp = 0; DeleteQueue(S,&temp); InsertQueue(S,e); return -1; } *(S->base + S->rear) = e; printf("insert %p : %d
",(S->base + S->rear),e); S->rear = (S->rear + 1)%MAXQSIZE; return 1; } int DeleteQueue(SqQueue *S, QElemType * e) { if(S->front == S->rear) { return -1; } *e = *(S->base + S->front); printf("del %p : %d
",(S->base + S->front),*e); S->front = (S->front + 1)%MAXQSIZE; return 1; } void PrintQueue(SqQueue *S) { int *a = S->base; int front = S->front; int rear = S->rear; while(front != rear) { printf("%d\t",a[front]); front ++; } printf("
"); } void DestoryQueue(SqQueue *S) { free(S->base); } int main(int argc ,char** argv) { SqQueue S; printf("main %p
",S.base); InitSqQueue(&S); int i = 0; for(i = 0 ; i < 20 ; i++) { InsertQueue(&S,i); } // PrintQueue(&S); DeleteQueue(&S,&i); // PrintQueue(&S); printf("main %p
",S.base); free(S.base); printf("main %p
",S.base); //S.base = NULL; // DestoryQueue(&S); return 1; }

実行結果は次のとおりです.
root@ubuntu:/mnt/hgfs/E/Lessons/MyExercise/DS/3# ./SqQueue                

main  0xe344d5

Init 0x822d008

insert  0x822d008 : 0

insert  0x822d00c : 1

insert  0x822d010 : 2

insert  0x822d014 : 3

insert  0x822d018 : 4

insert  0x822d01c : 5

insert  0x822d020 : 6

full e:  7  !!!

del  0x822d008 : 0

insert  0x822d024 : 7

full e:  8  !!!

del  0x822d00c : 1

insert  0x822d008 : 8

full e:  9  !!!

del  0x822d010 : 2

insert  0x822d00c : 9

full e:  10  !!!

del  0x822d014 : 3

insert  0x822d010 : 10

full e:  11  !!!

del  0x822d018 : 4

insert  0x822d014 : 11

full e:  12  !!!

del  0x822d01c : 5

insert  0x822d018 : 12

full e:  13  !!!

del  0x822d020 : 6

insert  0x822d01c : 13

full e:  14  !!!

del  0x822d024 : 7

insert  0x822d020 : 14

full e:  15  !!!

del  0x822d008 : 8

insert  0x822d024 : 15

full e:  16  !!!

del  0x822d00c : 9

insert  0x822d008 : 16

full e:  17  !!!

del  0x822d010 : 10

insert  0x822d00c : 17

full e:  18  !!!

del  0x822d014 : 11

insert  0x822d010 : 18

full e:  19  !!!

del  0x822d018 : 12

insert  0x822d014 : 19

del  0x822d01c : 13

main  0x822d008

main  0x822d008

root@ubuntu:/mnt/hgfs/E/Lessons/MyExercise/DS/3#