數(shù)據(jù)結(jié)構(gòu)(順序線性表___C語言代碼實現(xiàn))

一.準(zhǔn)備工作做好:

對于需要建構(gòu)順序線性表的必備變量和結(jié)構(gòu)體

  1. 狀態(tài)量
  2. 內(nèi)存大小量、內(nèi)存增加量
  3. 重定義整形(int)類型變量
    #include<stdio.h>
    #include<stdlib.h>
    #include <malloc.h>
    
    #define LIST_INIT_SIZE 10
    #define LIST_INCREAMENT 10
    #define ERROR -2
    #define OK 1
    #define TRUE 1
    #define FLASE 0
    #define OVERFLOW -1
    
    typedef int ElemType; 
    typedef int Status; 
    typedef struct{     
        ElemType *elem;     
        int length;     
        int Listsize;
    }Sqlist;

二、構(gòu)建初始化函數(shù)

  1. 分配空間(void×)malloc(LIST_INIT_SISE * sizeof(ElemType))
  2. 對于內(nèi)存是否分配成功的容錯性檢查(特殊返回值)
  3. 對于線性表空表的長度進(jìn)行初始化為0
  4. 定義內(nèi)存大小(方便以后比較是否需要擴(kuò)容)
    Status InitList(Sqlist &L)
    {
        L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
        if(!L.elem)
        {
            printf("硬盤存儲空間有限,無法開辟空間\n");
            return ERROR;
        }
        L.length = 0;
        L.Listsize = LIST_INIT_SIZE;//對于內(nèi)存大小不糾結(jié)于字節(jié)數(shù),而是能存儲的元素個數(shù)
        return OK;
    }

三、對線性表進(jìn)行初值填充

1.判斷當(dāng)前的存儲空間是否大于賦值的空間(內(nèi)存大小判斷檢查)
(2. 新開辟空間容錯性檢查
(2. 循環(huán)賦值

  1. 對線性表的長度賦值
    Status ValueList(Sqlist &L)
    {
        int i,j;
        printf("請輸入線性表表單個數(shù):");
        scanf("%d",&i);
        if(i > L.Listsize)//輸入表單數(shù),大于開辟內(nèi)存大小時
        {
            while(1)//開辟空間直到大于需要的范圍為止
            {
                if(i > L.Listsize)
                {
                    L.elem = (ElemType *)realloc(L.elem,LIST_INCREAMENT*sizeof(ElemType));
                    L.Listsize += LIST_INCREAMENT;
                }
                else break;
            }
        }
        for(j = 0 ;j < i; j++)
                scanf("%d",&L.elem[i]);
        L.length = i;//表單長度進(jìn)行賦值,保存
        printf("賦值成功?。?!\n");
        return OK;
    }

三、重置空表

空表的定義:線性表中元素個數(shù)n(n>=0)定義為線性表的長度,n = 0時稱為空表。

  1. 空表時指針存在,線性表個數(shù)歸零。
    Status ClearList(Sqlist &L)
    {
        if(L.elem)
        {
            L.length = 0;
            printf("線性表重置成功?。?!\n");
            return OK;
        }
        else
        printf("重置失敗,線性表不存在?。?!\n");
        return FLASE;
    }

##四、判斷空表
1. 空表時指針存在,判斷線性表個數(shù)是否為零。

    Status ListEmpty(Sqlist L)
    {
        if(L.elem)
        {
            if(L.length == 0){printf("此表為空表!?。n"); return TRUE;}
            printf("此表不為空表?。?!\n");
            return FLASE;
        }
        else
        printf("判斷失敗,線性表不存在?。。n");
        return ERROR;
    }

五、線性表長度

  1. 直接返回值L.length
    Status ListLength(Sqlist L)
    {
        printf("%d",L.length);
        return OK;
    }

六、獲取線性表元素

  1. 確定傳輸參數(shù)類型
  2. 判斷獲取的索引號是否出邊界
    Status GetElem(Sqlist L ,int index )
    {
        int e;
        if(index < 1 || index > L.length)
        {
            printf("獲取值失?。。。∷饕鲞吔?。\n");
            return ERROR;
        }
        e = L.elem[index];
        return e;
    }

七、查找線性表元素

  1. 遍歷元素,找到輸出返回
  2. 找不到,返回ERROR。
    Status Search(Sqlist L,ElemType e)
    {
        int j = 0;
        for(;j < L.length; j++)
        {
            if(L.elem[j] == e)
            {
                printf("找到索引元素!?。∑渚幪柺?d號\n",j+1);
                return j+1;
            }
            else
            printf("未找到元素?。?!\n");
            return FLASE;
        }
    return OK;
    }

八、刪除線性表元素

  1. 判斷刪除索引是否大于線性表最大元素索引
  2. 找到指定位置,向前一位賦值。
    Status DeleteList(Sqlist &L,int index)
    {
        if(index < 1 || index > L.length)
            {
                printf("刪除失?。。。∷饕鲞吔?。\n");
                return ERROR;
            }
        else
            {
                int j = index- 1;
                for(; j >= L.length-1 ; j++)
                    L.elem[j+1] = L.elem[j];
                L.length--;
                return OK;
            }
    }

九、插入線性表

  1. 插入值的范圍[ 1 ~ L.length+1 ] (在每一位的前面插入元素)
  2. 判斷是否出了索引邊界
     Status DeleteList(Sqlist &L,int index)
        {
            if(index < 1 || index > L.length)
                {
                    printf("刪除失?。。?!索引超出邊界。\n");
                    return ERROR;
                }
            else
                {
                    int j = index- 1;
                    for(; j >= L.length-1 ; j++)
                        L.elem[j+1] = L.elem[j];
                    L.length--;
                    return OK;
                }
        }

十、主菜單

    int main()
    {
    
        Sqlist L;
        int e = 0,index;
        while(1)
        {
            printf("1.初始化線性表,開辟空間\n");
            printf("2.對線性表進(jìn)行賦值\n");
            printf("3.對線性表進(jìn)行重置\n");
            printf("4.判斷線性表是否為空表\n");
            printf("5.獲取線性表長度\n");
            printf("6.獲取線性表對應(yīng)元素\n");
            printf("7.查找線性表對應(yīng)元素\n");
            printf("8.刪除線性表對應(yīng)元素\n");
            printf("9.插入線性表\n");
            printf("10. 打印\n");
            printf("11. 退出\n");
            int x;
            scanf("%d",&x);
        switch(x)
            {
            case 1: InitList(L);  break;
            case 2: ValueList(L); break;
            case 3: ClearList(L); break;
            case 4: ListEmpty(L); break;
            case 5: ListLength(L); break;
            case 6:
                {
                    printf("請輸入想要查找元素的索引號:\n");
                    scanf("%d",&index);
                    GetElem(L,index);
                }break;
            case 7:
                {
                    printf("請輸入想要查找的元素:\n");
                    scanf("%d",&e);
                    Search(L,e);
                }break;
            case 8:
                {
                    printf(" 請輸入刪除元素的索引號:\n");
                    scanf("%d",&index);
                    DeleteList(L,index);
                }break;
            case 9:
                {
                    printf("請輸入插入元素的位置索引號:\n");
                    scanf("%d",&index);
                    printf("請輸入想要插入的元素:\n");
                    scanf("%d",&e);
                    InsertList(L,index,e);
                }break;
            case 10: PrintList(L);
            case 11: exit(0);
            }
        }
    return 0;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容