天天看点

数据结构顺序表创建及操作

数据结构顺序表的创建及操作

  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);
    }
           

谢谢大家、欢迎补充!大家一起学习。

继续阅读