数据结构(C语言版)---第三章栈和队列 3.4.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\n",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  !!!\n",e);



        int temp = 0;

        DeleteQueue(S,&temp);

        InsertQueue(S,e);

        return -1;

    }



    *(S->base + S->rear) = e;

    printf("insert  %p : %d\n",(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\n",(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("\n");



}



void DestoryQueue(SqQueue *S)

{

    free(S->base);

}



int main(int argc ,char** argv)

{

    SqQueue S;

    printf("main  %p\n",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\n",S.base);

    free(S.base);

    printf("main  %p\n",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# 

 

你可能感兴趣的:(数据结构)