zoukankan      html  css  js  c++  java
  • 队列的顺序实现

    1.#include <stdio.h>
    #include <stdlib.h>
    #include "SeqQueue.h"

    /* run this program using the console pauser or add your own getch, system("pause") or input loop  表示测试的窗口 */

    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("Header: %d ", *(int*)SeqQueue_Header(queue));
        printf("Length: %d ", SeqQueue_Length(queue));
        printf("Capacity: %d ", SeqQueue_Capacity(queue));
        
        while( SeqQueue_Length(queue) > 0 )
        {
            printf("Retrieve: %d ", *(int*)SeqQueue_Retrieve(queue));
        }
        
        SeqQueue_Destroy(queue);
        
        return 0;
    }

    2.#include <stdio.h>
    #include <malloc.h>
    #include "SeqList.h"

    typedef unsigned int TSeqListNode;
    typedef struct _tag_SeqList
    {
        int capacity;
        int length;
        TSeqListNode* node;
    } TSeqList;

    SeqList* SeqList_Create(int capacity) // O(1)
    {
        TSeqList* ret = NULL;
        
        if( capacity >= 0 )
        {
            ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode) * capacity);
        }
        
        if( ret != NULL )
        {
            ret->capacity = capacity;
            ret->length = 0;
            ret->node = (TSeqListNode*)(ret + 1);
        }
        
        return ret;
    }

    void SeqList_Destroy(SeqList* list) // O(1)
    {
        free(list);
    }

    void SeqList_Clear(SeqList* list) // O(1)
    {
        TSeqList* sList = (TSeqList*)list;
        
        if( sList != NULL )
        {
            sList->length = 0;
        }
    }

    int SeqList_Length(SeqList* list) // O(1)
    {
        TSeqList* sList = (TSeqList*)list;
        int ret = -1;
        
        if( sList != NULL )
        {
            ret = sList->length;
        }
        
        return ret;
    }

    int SeqList_Capacity(SeqList* list) // O(1)
    {
        TSeqList* sList = (TSeqList*)list;
        int ret = -1;
        
        if( sList != NULL )
        {
            ret = sList->capacity;
        }
        
        return ret;
    }

    int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) // O(n)
    {
        TSeqList* sList = (TSeqList*)list;
        int ret = (sList != NULL);
        int i = 0;
        
        ret = ret && (sList->length + 1 <= sList->capacity);
        ret = ret && (0 <= pos);
        
        if( ret )
        {
            if( pos >= sList->length )
            {
                pos = sList->length;
            }
            
            for(i=sList->length; i>pos; i--)
            {
                sList->node[i] = sList->node[i-1];
            }
           
            sList->node[i] = (TSeqListNode)node;
            
            sList->length++;
        }
        
        return ret;
    }

    SeqListNode* SeqList_Get(SeqList* list, int pos) // O(1)
    {
        TSeqList* sList = (TSeqList*)list;
        SeqListNode* ret = NULL;
        
        if( (sList != NULL) && (0 <= pos) && (pos <= sList->length) )
        {
            ret = (SeqListNode*)(sList->node[pos]);
        }
        
        return ret;
    }

    SeqListNode* SeqList_Delete(SeqList* list, int pos) // O(n)
    {
        TSeqList* sList = (TSeqList*)list;
        SeqListNode* ret = SeqList_Get(list, pos);
        int i = 0;
        
        if( ret != NULL )
        {
            for(i=pos+1; i<sList->length; i++)
            {
                sList->node[i-1] = sList->node[i];
            }
            
            sList->length--;
        }
        
        return ret;
    }

    3.#ifndef _SEQLIST_H_
    #define _SEQLIST_H_

    typedef void SeqList;
    typedef void SeqListNode;

    SeqList* SeqList_Create(int capacity);

    void SeqList_Destroy(SeqList* list);

    void SeqList_Clear(SeqList* list);

    int SeqList_Length(SeqList* list);

    int SeqList_Capacity(SeqList* list);

    int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);

    SeqListNode* SeqList_Get(SeqList* list, int pos);

    SeqListNode* SeqList_Delete(SeqList* list, int pos);

    #endif

    4.#include "SeqList.h"
    #include "SeqQueue.h"

    SeqQueue* SeqQueue_Create(int capacity) // O(1)
    {
        return SeqList_Create(capacity);
    }

    void SeqQueue_Destroy(SeqQueue* queue) // O(1)
    {
        SeqList_Destroy(queue);
    }

    void SeqQueue_Clear(SeqQueue* queue) // O(1)
    {
        SeqList_Clear(queue);
    }
    //插入
    int SeqQueue_Append(SeqQueue* queue, void* item) // O(1)
    {
        return SeqList_Insert(queue, item, SeqList_Length(queue));
    }
    //取出
    void* SeqQueue_Retrieve(SeqQueue* queue) // O(n)
    {
        return SeqList_Delete(queue, 0);
    }

    void* SeqQueue_Header(SeqQueue* queue) // O(1)
    {
        return SeqList_Get(queue, 0);
    }

    int SeqQueue_Length(SeqQueue* queue) // O(1)
    {
        return SeqList_Length(queue);
    }
    //容量
    int SeqQueue_Capacity(SeqQueue* queue) // O(1)
    {
        return SeqList_Capacity(queue);
    }

    5.#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);
    //取回
    void* SeqQueue_Retrieve(SeqQueue* queue);
    //获取队头元素
    void* SeqQueue_Header(SeqQueue* queue);

    int SeqQueue_Length(SeqQueue* queue);
    //返回队列的容量
    int SeqQueue_Capacity(SeqQueue* queue);

    #endif

  • 相关阅读:
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 454 四数相加 II
    Java实现 LeetCode 454 四数相加 II
    Java实现 LeetCode 454 四数相加 II
    FFmpeg解码H264及swscale缩放详解
    linux中cat more less head tail 命令区别
    C语言字符串操作总结大全(超详细)
    如何使用eclipse进行嵌入式Linux的开发
  • 原文地址:https://www.cnblogs.com/wxb20/p/6144735.html
Copyright © 2011-2022 走看看