当前位置: 首页 > news >正文

数据结构-顺序表

1.顺序表的概念


顺序表:线性表的顺序存储,称为顺序表(数组)
线性表:是由多个类型相同
个数有限的数据元素组成的集合(属相)
顺序表:逻辑结构线性结构
存储结构:顺序存储
线性表的分类:顺序表,链表,栈,队列,数组,字符串

2顺序表的基本操作


2.1 创建顺序表

 Sqlist * create_Sqlist()
{
        //创建数据表
        Sqlist* list=(Sqlist*)malloc(sizeof(Sqlist));
        if(NULL==list)
        {
        printf("creat_Sqlist false");
        return NULL;
        }
        //对数据元素清0
        memset(list->data,0,sizeof(list->data));
        //对顺序表长度清0
        list->len=0;
        return list;
}


2.2 顺序表的尾插

//尾插
int insert_rear(datatype element,Sqlist* list)
{
        //判满判空
        if(NULL==list||list->len==MAXSIZE)
        {
                printf("insetr_rear error\n");
                return FALSE;
        }
        //尾插
        list->data[list->len]=element;
        list->len++;
        return  SUCCESS;
}


2.3 顺序表的遍历

      //循环遍历顺序表
int output_Sqlist(Sqlist *list)
{
        //1.顺序表创建失败
        //2.判空
        if(NULL==list || list->len==0)
        {
        printf("out_sqlist error");
        return FALSE;
        }
        int i=0;
        while(i++<list->len)
        {
                printf("%d",list->data[i]);
        }
        return SUCCESS;
}


2.4 顺序表尾删

//尾删
int  delete_rear(Sqlist* list)
{
        //判断创建
        //判空
        if(NULL==list ||list->len==0)
        {
                printf("detele_rear error\n");
                return FALSE;
        }
        //尾删
        list->data[list->len-1]=0;
        list->len--;
        return SUCCESS;
}


2.5 顺序表按下表查找

//按下标查找
int locate_sub(Sqlist *list,int sub)
{

        //1.判断
        if(NULL==list||list->len==0)
        {
        printf("insert_1 error");
        return FALSE;
        }
        if(sub<0 ||sub>list->len)
        {
                printf("insert_sub error");
                return FALSE;
        }
        //2.查找
        printf("%d",list->data[sub]);
        return SUCCESS;
}


2.6 顺序表按下表删除

//按下标删除
int delete_sub(Sqlist *list,int sub)
{
        //1.判空
        //2.判溢出
        //3.按下标
        if(list->len==0&&NULL==list&&sub>0&&sub<list->len)
        {
                printf("delete_sub error");
                return FALSE;
        }
        for(int i=sub+1;i<list->len;i++)
        {
        list->data[i-1]=list->data[i];
        }
        list->len--;
        return SUCCESS;
}


2.7 顺序表按下表修改

//按下标修改
int revise_sub(Sqlist *list,int sub,datatype element)
{
        //1.判断
        if(NULL==list||list->len==0)
        {
        printf("insert_1 error");
        return FALSE;
        }
        if(sub<0 ||sub>list->len)
        {
                printf("insert_sub error");
                return FALSE;
        }
        //2.修改
        list->data[sub]=element;
        printf("%d",list->data[sub]);
        return SUCCESS;
}


2.8 顺序表按下表插入

//按下标插入
int insert_sub(Sqlist *list,int sub,datatype element)
{
        //1.插入失败
        if(NULL==list||list->len==0)
        {
        printf("insert_sub error");
        return FALSE;
        }
        //2.创建
        //3.判断插入下标
        if(sub<0 ||sub>list->len)
        {
                printf("insert_sub error");
                return FALSE;
        }
        //4.插入
        for(int i=list->len-1;i>=sub;i--)
{
        list->data[i+1]=list->data[i];
        }
        list->data[sub]=element;
        list->len++;
        return SUCCESS;
}

2.9顺序表按元素查找

//按元素查找
int locate_element(Sqlist *list,datatype element)
{

        //1.判断
        if(NULL==list||list->len==0)
        {
        printf("create error");
        return FALSE;
        }
        //2.查找
        for(int i=0;i<list->len;i++)
        {
                if(element==list->data[i])
                {
                        return i;
                }
        }
        return FALSE;
}


2.10 顺序表按元素删除

//按元素删除
int delete_element(Sqlist *list,datatype element)
{
        int sub=locate_element(list,element);
        delete_sub(list,sub);
}


2.11 顺序表按元素修改

//按元素修改
int revise_element(Sqlist *list,datatype element1,datatype element2)
{
        int sub=locate_element(list,element1);
        revise_sub(Sqlist *list,datatype element2);
        return SUCCESS;
}

2.12去重

//去重
void deduplication(Sqlist *list)
{

        //1.判断
        if(NULL==list||list->len==0)
        {
        printf("craete error");
        return NULL;
        }
        for(int i=0;i<list->len;i++)
        {
                for(int j=i;j<list->len;j++)
                {
                        if(list->data[i]==list->data[j])
                        {
                                delete_sub(list,j);
                                j--;
                        }
                }
        }
}

2.13冒泡排序

//冒泡排序
void bubble_sort(Sqlist *list)
{
        int temp;
        for(int i=0;i<list->len;i++)
        {
                for(int j=0;j<list->len-i-1;j++)
                {
                        if(list->data[j]>list->data[j+1])
                        {
                                int temp=list->data[j];
                                list->data[j]=list->data[j+1];
                                list->data[j+1]=temp;
                        }
                }
        }
                int temp=list->data[i];
                list->data[i]=list->data[min];
                list->data[j]=temp;
}

2.14选择排序

/选择排序
void select_sort(Sqlist *list)
{
        int min;
        for(int i=0;i<list->len;i++)
        {
                int min=i;
                for(int j=i+1;j<list->len;j++)
                {
                        if(list->data[j]>list->data[min])
                        {
                                min=j;
                        }
                }
                int temp=list->data[i];
                list->data[i]=list->data[min];
                list->data[j]=temp;
        }
}

注:判断也可单独封装为一个函数。

相关文章:

  • 东方财富股吧发帖与评论爬虫
  • 基于腾讯云TI-ONE 训练平台快速部署和体验 DeepSeek 系列模型
  • 「AI学习笔记」机器学习与深度学习的区别:从技术到产品的深度解析(四)...
  • 如何高效利用 AI 工具提升开发效率?
  • 机器学习PCA和LDA
  • du-磁盘占用管理
  • 基于Python实现的缓存淘汰替换策略算法,该算法将缓存分区
  • MongoDB 架构设计:深入解析核心组件与工作原理
  • 二分搜索法、二分查找法【C/C ++】
  • 数据结构:最小生成树
  • FFmpeg源码:av_strlcpy函数分析
  • 探索 DeepSeek:AI 领域的璀璨新星
  • 深度学习实战道路裂缝缺陷识别
  • 计算四个锚点TOA定位中GDOP的详细步骤和MATLAB例程
  • PyTorch 源码学习:阅读经验 代码结构
  • Flink提交pyflink任务
  • pytest asyncio 支持插件 pytest-asyncio
  • 基于51单片机的的鸡笼补光和恒温系统的设计与实现(源程序+Protues仿真+电路图+元件清单+器件手册)
  • python opencv基础使用总结
  • 41.日常算法
  • 华夏银行一季度营收降逾17%、净利降逾14%,公允价值变动损失逾24亿
  • 北京朝阳涉住宅组团地块126亿元成交
  • 日月谭天丨赖清德强推“脱中入北”是把台湾带向死路
  • 商务部:4月份以来的出口总体延续平稳增长态势
  • 伊朗港口爆炸致18死800余伤,三分之二伤者已出院
  • 规范涉企案件审判执行工作,最高法今天发布通知