zoukankan      html  css  js  c++  java
  • 用c语言创建双向环形链表

    作为一个C开发人员,无论在求职笔试题中,还是在工程项目中,都会遇到用c语言创建双向环形链表。这个也是理解和使用c指针的一项基本功。

    #include<...>//头文件省略

    typedef struct ringbuf_str
    {
    unsigned int ringID; /* ring ID*/
    struct ringbuf_str *next; /* Next ringbuf in list */
    struct ringbuf_str *pre; /* Previous ringbuf in list */
    } RINGBUF_T;

    RINGBUF_T *Init_Ringbuf(int len)
    {
    RINGBUF_T *pCurrent=null;
    RINGBUF_T *pHead=null;
    RINGBUF_T *pPrevious=null;
    int i=0;

    //@1.创建链表头pHead
    pCurrent = (RINGBUF_T *)calloc(sizeof(RINGBUF_T),1);
    if(pCurrent == null)
    {
    return null;
    }
    pHead = pCurrent;
    pPrevious = pCurrent;
    //初始化表头内容
    pHead->pre = pCurrent;
    pHead->next = pCurrent;
    pHead->ringID = 0;

    //@2.创建链表体.
    for(i=1;i<len;i++)
    {
    pCurrent = (RINGBUF_T *)calloc(sizeof(RINGBUF_T),1);
    if(pCurrent == null)
    {
    return null;
    }

    pPrevious->next = pCurrent;
    pCurrent->pre = pPrevious;
    pCurrent->ringID = i;

    pPrevious = pCurrent;
    }
    //@3.链表首尾相接,形成环形链表
    pHead->pre = pCurrent;
    pCurrent->next = pHead;

    return(pHead);
    }
    //删除链表
    int Release_Ringbuf(RINGBUF_T *ringbuff,int len)
    {
    RINGBUF_T *pCurrent = null;
    RINGBUF_T *pPrevious = null;
    int i = 0;

    if(ringbuff == null)
    return -1;

    pCurrent = ringbuff;

    for(i=0;i<len; i++)
    {
    pPrevious = pCurrent;
    pCurrent = pCurrent->next;
    free(pPrevious);
    }
    pCurrent = IC_NULL;
    pPrevious = IC_NULL;

    return 0;
    }
    //main函数
    int main(void)
    {
    #define RINGBUFFLEN 10
    RINGBUF_T *ringbuff=null;

    //@1.初始化一个链表,长度为RINGBUFFLEN
    ringbuff=Init_Ringbuf(RINGBUFFLEN);

    //@2. do some operations
    //...

    //@3.释放该链表
    Release_Ringbuf(ringbuff,RINGBUFFLEN);

    return 0;
    }

  • 相关阅读:
    【Swing】简单的计算器
    【SQL】嵌套查询与子查询
    【网络协议抓包分析】TCP传输控制协议(连接建立、释放)
    【网络协议抓包分析】IP互联网协议
    ******常见数据库笔试题*****
    OSI参考模型 VS TCP/IP参考模
    TCP/IP四层模型
    数组实现栈的功能
    子网掩码怎么计算
    C# 启动和结束一个线程
  • 原文地址:https://www.cnblogs.com/sunzl1987/p/4106003.html
Copyright © 2011-2022 走看看