1. 程式人生 > >資料結構與演算法之順序表C語言實現

資料結構與演算法之順序表C語言實現

順序表等相關概念請自行查閱資料,這裡主要是實現。

注:

1.順序表C語言實現;

2.按較簡單的方式實現,主要幫助理解,可在此基礎上修改,更加完善;

3.提供幾個簡單函式,可自行新增功能;

4.可用C++封裝,得知STL中vector原理。

 

 順序表容量。

#define CAPACITY 20 //容量

順序表結構體。

typedef struct 
{
    int *m_pHead; //指向陣列頭
    int m_iSize; //大小
    int m_iCapacity; //容量
}STABLE;

部分操作,可自行新增其他操作。

STABLE* createTable(); 
void addElement(STABLE* pTable, int iElement);
void delElement(STABLE* pTable);
void showTable(STABLE* pTable);
void releaseMem(STABLE* pTable);

分配記憶體,元素個數為0。

STABLE* createTable()
{
    STABLE *pTable = (STABLE*)malloc(sizeof(STABLE));
    if(!pTable)
    {
        printf(
"動態記憶體分配失敗!\n"); return pTable; } pTable->m_pHead = NULL; pTable->m_iSize = 0; pTable->m_iCapacity = 0; pTable->m_pHead = (int*)malloc(sizeof(int) * CAPACITY); if(!pTable->m_pHead) { printf("動態記憶體分配失敗!\n"); return NULL; } pTable
->m_iSize = 0; pTable->m_iCapacity = CAPACITY; return pTable; }

往末尾新增,想任意位置新增,加一個索引引數,元素後移,可自行實現。

void addElement(STABLE* pTable, int iElement) 
{
    if(!pTable || !pTable->m_pHead)
    {
        printf("順序表不存在!\n");
        return;
    }

    if(pTable->m_iSize == pTable->m_iCapacity)
    {
        printf("順序表已滿!\n"); //可以重新分配記憶體 這裡就不實現了 從簡
        return;
    }

    pTable->m_pHead[pTable->m_iSize] = iElement;
    pTable->m_iSize++;
}

末尾刪除,想任意位置刪除,加一個索引引數,元素前移,可自行實現。

void delElement(STABLE* pTable)
{
    if(!pTable || !pTable->m_pHead)
    {
        printf("順序表不存在!\n");
        return;
    }

    if(pTable->m_iSize < 1)
    {
        printf("順序表元素個數為0!\n");
        return;
    }

    pTable->m_iSize--;
}

列印所有元素。

void showTable(STABLE* pTable)
{
    if(!pTable || !pTable->m_pHead)
    {
        printf("順序表不存在!\n");
        return;
    }

    printf("容量:%d,大小:%d,列印元素:\n", pTable->m_iCapacity, pTable->m_iSize);
    for(int i = 0; i < pTable->m_iSize; i++)
        printf("%d ", pTable->m_pHead[i]);

    printf("\n");
}

記憶體釋放。

void releaseMem(STABLE* pTable)
{
    if(!pTable)
    {
        printf("順序表不存在!\n");
        return;
    }

    if(pTable->m_pHead)
        free(pTable->m_pHead);

    free(pTable);
    printf("記憶體釋放成功!\n");
}