IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 数据结构顺序表的基本操作(动态分配) -> 正文阅读

[开发工具]数据结构顺序表的基本操作(动态分配)

线性表的应用:

一、顺序表的基本操作(静态分配)

顺序表的基本操作(动态分配)

#include<stdio.h>
#include<stdlib.h>

#define InitSize 10
typedef struct DynamicSqlList{
    /* data */
    int *data;
    int MaxSize;
    int length;
}DynamicSqlList;

// 生成顺序表的测试数据
void InitListData(DynamicSqlList &L){   
    L.data = (int*)malloc(sizeof(int)*InitSize);
    L.MaxSize = InitSize; 
    for (int i = 0; i < 6; i++){
       L.data[i] = i+1;
       L.length=i+1;
    }
}

// 初始化顺序表
void InitList(DynamicSqlList &L){
    L.data = (int*)malloc(sizeof(int)*InitSize);
    L.length = 0;
    L.MaxSize = InitSize;
}

// 增加表的容量
void IncreaSize(DynamicSqlList &L, int len){
    int *p = L.data;
    L.data = (int *)malloc(sizeof(int)*(L.length + len));
    for (int i = 0; i < L.length; i++){
        L.data[i] = p[i];
    }
    L.MaxSize = L.MaxSize+len;
    free(p);   
}

// / 顺序表数据的插入
bool ListInsert(DynamicSqlList &L,int i,int e){
    if (i<1||i>L.length+1){
        printf("插入失败\n");
        return false;
    }
    // if (i==L.length+1){
    //     int e,len;
    //     printf("你插入的数据已超过表的最大长度,是否扩充顺序表的容量 【是】1 【否】2:");
    //     scanf("%d",&e);
    //     if (e==1){
    //         printf("输入你要扩充表的长度Len:");
    //         scanf("%d",&len);
    //         IncreaSize(L,len);
    //     }    
    // }
    if(i==L.length+1){
        IncreaSize(L,InitSize);
    }
    for (int j = L.length ; j >= i; j--){
        L.data[j] = L.data[j-1];
    }
    L.data[i-1] = e;
    L.length++;
    return true;
}

// 顺序表数据的删除
bool ListDelet(DynamicSqlList &L,int i ,int &e){
    if(i<1||i>L.length){
        return false;
    }
    e = L.data[i-1];
    for(int j=i;j<L.length;j++){
        L.data[j-1] = L.data[j];
    }
    L.length--;
    return true;
}

// 顺序表数据的修改
bool ListUpdata(DynamicSqlList &L,int i){
    if(i<1||i>L.length){
        printf("修改第%d个位置的数据失败,请检查修改数据的位置是否符合要求!!!",i);
        return false;
    }
    int e,n;
    e = L.data[i-1];
    printf("是否修改第%d个位置的%d元素    是【1】 否【2】:",i,e);
    scanf("%d",&n);
    if(n==1){
        printf("输入要修改的元素【e】:");
        scanf("%d",&e);
        L.data[i-1] = e;
    }
    if(n==2){ 
        return false;
    }
    return true;
}

// 顺序表按位查找值
int GetElem(DynamicSqlList &L,int i){
    if(i<1||i>L.length){
        printf("请检查查找的位置是否符合要求!!!!\n");
        return 0;
    }
    return L.data[i-1];
}

// 顺序表按值查找数据
int LocateElem(DynamicSqlList &L, int e){
    for(int i=0;i<L.length;i++){
        if(L.data[i]==e){
            return i+1;
        }
    }
    return 0;
}

// 顺序表的数据表的展示
void ShowList(DynamicSqlList L){
    if(L.length==0){
        printf("顺序表无数据\n");
    }else{
        for (int i = 0; i < L.length; i++){
        printf("data[%d]的值为:%d\n",i,L.data[i]);
        }
    }
    
    
}

// 操作指南
void Copoer(){
    printf("--------------------------------------------\n");
    printf("|        -----1、顺序表--初始化-----       |\n");
    printf("|        -----2、表数据--插入-----         |\n");    
    printf("|        -----3、表数据--删除-----         |\n");
    printf("|        -----4、表数据--修改-----         |\n");
    printf("|        -----5、表数据--查找(按位)-----   |\n");
    printf("|        -----6、表数据--查找(按值)-----   |\n");
    printf("|        -----7、表数据--展示-----         |\n");
    printf("|        -----0、-----退出-------         |\n");
    printf("|--------------------------------------------\n\n");
    
}

int main(){
    int i,e,m=10;
    DynamicSqlList L;
    while (m!=0){
        Copoer();
        printf("请输入要操作的数字:");
        scanf("%d",&m);
        if(m==1){
            printf("是否生成测试数据 【是】1 【否】2(输入2则是空表):");
            scanf("%d",&i);
            if(i==1){
                InitListData(L);
            }else{
                InitList(L);
            }
        }
        if(m==2){
            printf("请输入插入的位置i和要插入的值e:");
            scanf("%d,%d",&i,&e);
            // ListInsert(L,i,e);
            if(ListInsert(L,i,e)){
                printf("第%d个位置数据%d插入成功\n",i,e);
            }
        }
        if(m==3){
            int e = -1;
            printf("请输入要删除的位置i:");
            scanf("%d",&i);
            if(ListDelet(L,i,e)){
                printf("删除第%d个位置的元素%d成功\n",i,e);
            }else{
                printf("删除第%d个位置的元素有误\n",i);
            }
        }
        if(m==4){
            printf("输入要修改的位置i:");
            scanf("%d",&i);
            if(ListUpdata(L,i)){
                printf("修改成功\n");
            }else{
                printf("未修改成功\n");
            }
        }
        if(m==5){
            printf("输入要查找的位置i:");
            scanf("%d",&i);
            e = GetElem(L,i);
            if(e){
                printf("查找的元素为:【%d】\n",e);
            }
        }
        if(m==6){
            printf("输入要查找的值:");
            scanf("%d",&e);
            i = LocateElem(L,e);
            if(i){
                printf("您查找的值%d所在位序为:%d\n",e,i);
            }else{
                printf("您查找的值%d不存在!!!!!!\n",e);
            }
        }
        if(m==7){
            ShowList(L);
        }
        if(m==0){
            return 0;
        }
    }
    
    return 0;
}

注:本程序在vscode上编译运行的,在输入数据时输入的数据之间用“,”逗号隔开。其他的编译软件输入的数据之间应该只需要敲空格。

如有任何问题,欢迎各位留言评论,谢谢!!!!

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 12:08:05  更:2021-09-01 12:09:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:29:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码