天天看點

資料結構順序表建立及操作

資料結構順序表的建立及操作

  1. 結構體建立(兩種結構體定義方式)

    方式一:給結構體Sqlist定義了個别名

typedef struct Sqlist{
        int elem[MAXSIZE];
        int length;
    }Sqlist_t;
           

方式二:定義一個名字為Sqlist的結構體

struct Sqlist{
        int elem[MAXSIZE];
        int length;
    };
           

差別之處在于第一種方式給結構體定義了個别名

注釋:

int elem[MAXSIZE]:表示定義一個資料類型為int的數組用于存儲int型資料(根據你要存儲的資料類型可自由修改),MAXSIZE代表數組長度

int length:表示結構體的另一個屬性(用于表示從第幾個資料開始為空)

2.初始化指派

void create(Sqlist &L){
        int n;
        printf("要輸入資料的個數:");
        scanf("%d",&n);
        fflush(stdin);
        while(n > MAXSIZE){
            printf("越界、請從新輸入:");
            scanf("%d",&n);
            fflush(stdin);
        }
        L.length = ;//表示第幾個資料開始為空
        for(int i = ; i < n; i++){
            L.elem[L.length]=i;
            L.length++;
        }
    }
           

3.資料展示

void show(Sqlist L){
        int i = ;
        while(i<L.length){
            printf("%d\n",L.elem[i]);
            i++;
        }
    }
           

4.資料删除

void delData(Sqlist &L,int id){
        if(id <  || id >= L.length){
            printf("輸入有誤!");
        }else{
            for(int i = id; i < L.length; i++){
                L.elem[i-] = L.elem[i];
            }
            L.elem[L.length]=NULL;
            L.length--;
        }
    }
           

注釋:

id:表示要删除的位置(要做判斷避免越界);

從第id個位置開始将後面的資料都往前提一位(for循環的功能);

L.elem[L.length]=NULL;表示将最後一位設為NULL(空);

L.length–;表示第幾個位置開始為空;

5.添加資料

void addData(Sqlist &L,int id,int data){
        if(id <  || id > L.length){
            printf("輸入有誤!");
        }else{
            for(int i = L.length; i >= id; i--){
                L.elem[i] = L.elem[i-];
            }
            L.elem[id-] = data;
            L.length++;
        }
    }
           

注釋:

id:表示位置、位置必須連續

從第id個位置開始将後面的資料都往後一位(for循環的功能);

L.elem[id-1]=data;表示将第id位設為data;

L.length++;表示第幾個位置開始為空;

6.取資料(按位置取、并傳回值)

int selectData(Sqlist L,int id){
        if(id <  || id >= L.length){
            printf("輸入有誤!");
            return -;
        }else{
            int data = L.elem[id-];
            return data;
        }
    }
           

7.資料比對(按值比對,傳回第一次出現的位置)

int findId(Sqlist L,int data){
        for(int i = ; i < L.length; i++){
            if(L.elem[i] == data){
                return i+;
            }
        }
        return -;
    }
           

注釋:

周遊每一個位置進行比對、比對成功,則傳回位置。否則傳回-1

8.主方法

void main(){
            Sqlist La;//定義一個名字為La的結構體變量
            create(La);//初始化指派
            show(La);//資料展示
            addData(La,,);//在第四個位置添加資料20
            show(La);
            delData(La,);//删除第七個位置資料
            show(La);
            int data = selectData(La,);//查找第二位置的資料
            printf("%d\n",data);
            int id = findId(La,);//比對資料8的第一個位置
            printf("%d\n",id);
    }
           

謝謝大家、歡迎補充!大家一起學習。

繼續閱讀