【C語言--數據結構】線性表鏈式存儲結構


直接貼代碼

頭文件

#ifndef __LINKLIST_H__
#define __LINKLIST_H__

typedef void LinkList;
typedef struct _tag_LinkListNode
{
    LinkList* next;
}LinkListNode;

LinkList* LinkList_create();
void LinkList_Destroy(LinkList* pstList);
void LinkList_Clear(LinkList* pstList);
int LinkList_Lenght(LinkList* pstList);
int LinkList_Insert(LinkList* pstList, LinkListNode* pstNode, int iPos);
LinkListNode* LinkList_Get(LinkList* pstList, int iPos);
LinkListNode* LinkList_Delete(LinkList* pstList, int iPos);


#endif /* #ifndef __LINKLIST_H__ */

函數實現

/*
** 線性表的鏈式存儲
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "LinkList.h"

typedef struct _tag_LinkList
{
    LinkListNode header;
    int length;
}TLinkList;

/**************************************************************************
** 函 數 名: LinkList_Create
** 函數作用: 創建一個鏈式存儲的線性表
** 函數參數: void
** 返 回 值: LinkList* 
**
** 日    期: 2017年2月14日
** 作    者: Rookie
***************************************************************************/
LinkList* LinkList_create()
{
    TLinkList* pstRet = (TLinkList *)malloc(sizeof(TLinkList));

    if (NULL != pstRet)
    {
        pstRet->length = 0;
        pstRet->header.next = NULL;
    }

    return pstRet;
}

/**************************************************************************
** 函 數 名: LinkList_Destroy
** 函數作用: 銷毀一個鏈式存儲的線性表
** 函數參數: LinkList*
** 返 回 值: void
**
** 日    期: 2017年2月14日
** 作    者: Rookie
***************************************************************************/
void LinkList_Destroy(LinkList* pstList)
{
    free(pstList);
}

/**************************************************************************
** 函 數 名: LinkList_Clear
** 函數作用: 清空一個鏈式存儲的線性表
** 函數參數: LinkList*
** 返 回 值: void
**
** 日    期: 2017年2月14日
** 作    者: Rookie
***************************************************************************/
void LinkList_Clear(LinkList* pstList)
{
    TLinkList* pstRet = (TLinkList *)pstList;

    if (NULL != pstRet)
    {
        pstRet->length = 0;
        pstRet->header.next = NULL;
    }
    return;
}

/**************************************************************************
** 函 數 名: LinkList_Lenght
** 函數作用: 得到一個鏈式存儲的線性表的長度
** 函數參數: LinkList*
** 返 回 值: int
**
** 日    期: 2017年2月14日
** 作    者: Rookie
***************************************************************************/
int LinkList_Lenght(LinkList* pstList)
{
    TLinkList* pstRet = (TLinkList *)pstList;
    int iRet = -1;

    if (NULL != pstRet)
    {
        iRet = pstRet->length;
    }

    return iRet;
}

/**************************************************************************
** 函 數 名: LinkList_Insert
** 函數作用: 在一個鏈式存儲的線性表的指定位置插入節點
** 函數參數: LinkList* pstList
**           LinkListNode* pstNode
**           int iPos
** 返 回 值: int
**
** 日    期: 2017年2月14日
** 作    者: Rookie
***************************************************************************/
int LinkList_Insert(LinkList* pstList, LinkListNode* pstNode, int iPos)
{
    TLinkList* pstTemp = (TLinkList *)pstList;
    LinkListNode* pstNodeCurrent;
    int iRet = ((NULL != pstTemp) && (iPos >= 0) && (NULL != pstNode));
    int iLoop;

    if (iRet)
    {
        pstNodeCurrent = (LinkListNode*)pstTemp;

        for (iLoop = 0; (iLoop < iPos) && (pstNodeCurrent->next != NULL); iLoop++)
        {
            pstNodeCurrent = pstNodeCurrent->next;
        }

        pstNode->next = pstNodeCurrent->next;
        pstNodeCurrent->next = pstNode;
        pstTemp->length++;
    }

    return iRet;
}

/**************************************************************************
** 函 數 名: LinkList_Get
** 函數作用: 獲得一個鏈式存儲的線性表的指定位置節點
** 函數參數: LinkList* pstList
**           int iPos
** 返 回 值: LinkListNode*
**
** 日    期: 2017年2月14日
** 作    者: Rookie
***************************************************************************/
LinkListNode* LinkList_Get(LinkList* pstList, int iPos)
{
    TLinkList* pstTemp = (TLinkList *)pstList;
    LinkListNode* pstNodeRet = NULL;
    LinkListNode* pstNodeCur = NULL;
    int iLoop;

    if ((NULL != pstTemp) && (iPos >= 0) && (iPos <= pstTemp->length))
    {
        pstNodeCur = (LinkListNode*)pstTemp;

        for (iLoop = 0; iLoop < iPos; iLoop++)
        {
            pstNodeCur = pstNodeCur->next;
        }

        pstNodeRet = pstNodeCur->next;
    }

    return pstNodeRet;
}

/**************************************************************************
** 函 數 名: LinkList_Delete
** 函數作用: 刪除一個鏈式存儲的線性表的指定位置節點
** 函數參數: LinkList* pstList
**           int iPos
** 返 回 值: LinkListNode*
**
** 日    期: 2017年2月14日
** 作    者: Rookie
***************************************************************************/
LinkListNode* LinkList_Delete(LinkList* pstList, int iPos)
{
    TLinkList* pstTemp = (TLinkList *)pstList;
    LinkListNode* pstNodeRet = NULL;
    LinkListNode* pstNodeCur = NULL;
    int iLoop;

    if ((NULL != pstTemp) && (iPos >= 0) && (iPos < pstTemp->length))
    {
        pstNodeCur = (LinkListNode*)pstTemp;

        for (iLoop = 0; iLoop < iPos; iLoop++)
        {
            pstNodeCur = pstNodeCur->next;
        }

        pstNodeRet = pstNodeCur->next;
        pstNodeCur->next = pstNodeRet->next;
        pstTemp->length--;
    }

    return pstNodeRet;    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM