数据结构之顺序队列

来源:互联网 发布:源码分享 编辑:程序博客网 时间:2024/05/21 19:41

前面我们show了栈的技巧,那么今天继续学习下队列的,队列跟栈几乎类似,

所以在平时项目中用到的地方还是挺多的。

第八个例子,顺序队列的实现:

注:把我们先前实现的顺序链表的头文件和实现文件包含进来

头文件

#ifndef _SEQQUEUE_H_#define _SEQQUEUE_H_typedef void SeqQueue;SeqQueue* SeqQueue_Create(int capacity);void SeqQueue_Destroy(SeqQueue* queue);void SeqQueue_Clear(SeqQueue* queue);int SeqQueue_Append(SeqQueue* queue, void* item);int SeqQueue_Length(SeqQueue* queue);int SeqQueue_Capacity(SeqQueue* queue);void* SeqQueue_Retrieve(SeqQueue* queue);void* SeqQueue_Header(SeqQueue* queue);#endif

我个人有点小小的强迫症,代码尽量要求简洁,所以没有注释,有什么不明白的可以留言。

实现文件

#include "SeqList.h"#include "SeqQueue.h"SeqQueue* SeqQueue_Create(int capacity){    return SeqList_Create(capacity);          }void SeqQueue_Destroy(SeqQueue* queue){    return SeqList_Destroy(queue);     }void SeqQueue_Clear(SeqQueue* queue){    SeqList_Clear(queue);}int SeqQueue_Append(SeqQueue* queue, void* item){    return SeqList_Insert(queue, item, SeqList_Length(queue));    }int SeqQueue_Length(SeqQueue* queue){    return SeqList_Length(queue);}int SeqQueue_Capacity(SeqQueue* queue){    return SeqList_Capacity(queue);    }void* SeqQueue_Retrieve(SeqQueue* queue){    return SeqList_Delete(queue, 0);      }void* SeqQueue_Header(SeqQueue* queue){    return SeqList_Get(queue, 0);}
熟悉吗?是不是跟栈的实现类似呢?
测试文件

#include <stdio.h>#include <stdlib.h>#include "SeqQueue.h"int main(int argc, char *argv[]){    SeqQueue* queue = SeqQueue_Create(20);    int a[10] = {0};    int i = 0;        for (i = 0; i < 10; i++)    {        a[i] = i + 1;                SeqQueue_Append(queue, a + i);        }        printf("capacity:%d\n", SeqQueue_Capacity(queue));    printf("length:%d\n", SeqQueue_Length(queue));    printf("header:%d\n", *((int*)SeqQueue_Header(queue)));        while (SeqQueue_Length(queue) > 0)    {        printf("retrieve:%d\n", *((int*)SeqQueue_Retrieve(queue)));          }        SeqQueue_Clear(queue);    SeqQueue_Destroy(queue);         system("PAUSE");    return 0;}
好了,测试完毕,是不是觉得莪狠简单呢?但是问题来了,我们分析实现的代码中,

最常用的append操作时间复杂度是O(n),所以我们想下是否可以把常用操作时间复杂度进一步优化呢?

哈哈,先卖个关子,下一版本揭晓!


0 0
原创粉丝点击