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

0722 数据结构顺序表

Part 1.顺序表的代码

一.顺序表的内存申请

head.h:
typedef int datatype;typedef struct sqlist
{//数据元素datatype data[MAXSIZE];//顺序表长度int len;}*sqlist;
//*sqlist的作用:
//sqlist:struct Sqlist *
sqlist create();head.c:
sqlist create()
{sqlist list =(sqlist)malloc(sizeof(struct sqlist));//申请堆区空间由指针list接收if(NULL == list)return NULL;//数据表元素清零bzero(list->data,sizeof(list->data));//顺序表长度清零list->len = 0;return list;
}main.c:
sqlist list = create();

二.顺序表尾插+遍历

head.h:
int output(sqlist list);
int insert(sqlist list,datatype element);head.c:
//插入函数
int insert (sqlist list,datatype element)
{if(NULL == list || list->len == MAXSIZE){	printf("顺序表满了\n");return Faluse;}//插入数据list->data[list->len] = element;//顺序表长度自增list->len++;return Success;
}
//遍历函数
int output(sqlist list)
{if(NULL == list || list->len == 0){	printf("顺序表为空\n");return Faluse;}for(int i = 0;i < list->len; i++){printf("%d\t",list->data[i]);}printf("\n");return Success;
}main.c:
for(int i = 0; i < MAXSIZE; i++){scanf("%d",&element);insert(list,element);}output(list);

三.顺序表尾删

head.h:
int delete_rear(sqlist list);head.c:
int delete_rear(sqlist list)
{if(NULL == list || list->len == 0){	printf("顺序表为空\n");return Faluse;}list->len--;return Success;
}main.c:
delete_rear(list);

四.顺序表按下表插入

head.h:
int index_insert(sqlist list,int index, datatype element);head.c:
int index_insert(sqlist list,int index, datatype element)
{if(NULL == list || list->len == MAXSIZE || index < 0 || index >= list->len){	printf("error\n");return Faluse;}list->len++;for (int i = list->len; i >index; i--)//将要加数的下标的表值都往后移{list->data[i] = list->data[i-1];}list->data[index] = element;return Success;
}main.c:
index_insert(list,1,9);

五.顺序表按下表删除

head.h:
int index_delete(sqlist list,int index);head.c:
int index_delete(sqlist list,int index)
{if(NULL == list || list->len == 0 || index < 0 || index >= list->len){	printf("error\n");return Faluse;}for (int i = index; i < list->len; i++)//全部前移{list->data[i] = list->data[i+1];}list->len--;return Success;
}main.c:
index_delete(list,2);

六.顺序表按下表修改

head.h:
int index_change(sqlist list,int index,datatype element);head.c:
int index_change(sqlist list,int index, datatype element)
{if(NULL == list || list->len == 0 || index < 0 || index >= list->len){	printf("error\n");return Faluse;}list->data[index] = element;//将下标对应的表值改为输入的值return Success;
}main.c:
index_change(list,2,5);

七.顺序表按下表查找

head.h:
int index_select(sqlist list,int index);head.c:
int index_select(sqlist list,int index)
{if(NULL == list || list->len == 0 || index < 0 || index >= list->len){	printf("error\n");return Faluse;}printf("%d\n",list->data[index]);//输出下标的值return Success;
}main.c:
index_select(list,3);

八.顺序表按元素删除

head.h:
int element_delete(sqlist list,datatype element);head.c:
int element_delete(sqlist list,datatype element)
{if(NULL == list || list->len == 0){	printf("error\n");return Faluse;}int index = 0;for(int j = 0; j < list->len; j++){if(list->data[j] == element)//找到对应值的下标,进行下标删除{index = j;	for(int i = index; i < list->len; i++){list->data[i] = list->data[i+1];}list->len--;}}return Success;
}main.c;
element_delete(list,5);

九.顺序表按元素查找

head.h:
int element_select(sqlist list,datatype element);head.c:
int element_select(sqlist list,datatype element)
{if(NULL == list || list->len == 0){	printf("error\n");return Faluse;}int index = 0;for(int j = 0; j < list->len; j++){if(list->data[j] == element)//找到对应元素下标并输出{printf("%d\n",j);}}return Success;
}main.c:
element_select(list,9);

十.顺序表按元素修

head.h:
int element_change(sqlist list,datatype element,datatype elementchange);head.c:
int element_change(sqlist list,datatype element,datatype elementchange)
{if(NULL == list || list->len == 0){	printf("error\n");return Faluse;}int index = 0;for(int j = 0; j < list->len; j++){if(list->data[j] == element)//循环寻找下标,并赋值{list->data[j] = elementchange;}}return Success;
}main.c:
element_change(list,9,5);

十一.顺序表去重

head.h:
int D_repetition_rate(sqlist list);head.c:
int D_repetition_rate(sqlist list)
{if(NULL == list || list->len == 0){	printf("error\n");return Faluse;}int index = 0;for(int i = 0; i < list->len; i++){for(int j = i + 1; j < list->len; j++)//每次循环与循环首进行比较{if(list->data[i] == list->data[j])//找到相同的值,调用下标删除{	index = j;	for(int i = index; i < list->len; i++){list->data[i] = list->data[i+1];}list->len--;j--;//往前走一位}}}return Success;
}main.c:
D_repetition_rate(list);

十二.顺序表排序

head.h:
int paixu(sqlist list);head.c:
int paixu(sqlist list)
{if(NULL == list || list->len == 0){	printf("error\n");return Faluse;}for(int i = 1; i < list->len; i++)//冒泡排序{for(int j = 0; j < list->len-i; j++){if(list->data[j] >= list->data[j+1]){		int x = list->data[j];list->data[j] = list->data[j+1];list->data[j+1] = x;}}}return Success;
}main.c:
paixu(list);

Part 2.整理

一.数据结构

        1.逻辑结构

                a.集合结构

元素之间没有关系

                b.线性结构

元素之间有一对一的关系

                c.树形结构

元素之间有一对多关系

                d.图形结构

元素之间有多对多的关系

        2.存储结构

                a.顺序存储

使用一段连续的空间存储多个相同类型的数据元素

                b.链式存储

使用任意一段空间存储多个相同类型的数据元素

                a和b的区别

两种方式都是逻辑上相连,但是链式存储物理空间上没有相连

                c.索引结构

用索引方法和数据表实现查找的结构

                d.散列存储

使用哈希存储的一直存储方式

  二.时间复杂度

T(n) = O(f(n))

T:时间

n:问题的规模

O:大O阶,渐进符

无循环函数

int a = 0;                1

printf("%d",a);                1

T(n) =O(1)                

for循环

for(int i  = 0; i<n; i++)                n+1

{

        printf("%d",i);                n

}

T(n) =O(n)

嵌套for循环

for(int i  = 0; i<n; i++)                n+1

{

        for(int j  = 0; j<n; j++)         n*(n+1)

        {

                printf("%d",i);           n*n

        }          

}

T(n) =O(n^2)

三.顺序表

        1.本质

一个下标从0开始,和数组相似的,连续存储的空间

   

        

http://www.dtcms.com/a/292591.html

相关文章:

  • 循环神经网络--NLP基础
  • <另一种思维:语言模型如何展现人类的时间认知>总结
  • 大型语言模型(Large Language Models,LLM)
  • Science Robotics 机器人成功自主完成猪胆囊切除手术
  • vue3 动态判断 el-table列 用 v-if 是否显示
  • 微算法科技(NASDAQ: MLGO)探索优化量子纠错算法,提升量子算法准确性
  • 4.组合式API知识点(2)
  • 计算机视觉领域的AI算法总结——目标检测
  • C语言:循环结构
  • PePeOnTron上线 Binance Alpha:中文社区正走出自己的Web3之路
  • 基于网络爬虫的在线医疗咨询数据爬取与医疗服务分析系统,技术采用django+朴素贝叶斯算法+boostrap+echart可视化
  • 论文略读:Arcee’s MergeKit: A Toolkit for Merging Large Language Models
  • 电商开放平台获取商品数据返回信息详解
  • 旷视科技视觉算法面试30问全景精解
  • 飞算科技:用AI与数智科技,为产业数字化转型按下“加速键”
  • proxmox 解决docker容器MongoDB创建报错MongoDB 5.0+ requires a CPU with AVX support
  • 【集群】MySQL的主从复制了解吗?会有延迟吗,原因是什么?
  • 【无标题】AI视频-剧本篇学习笔记
  • 【面试】Redis分布式ID与锁的底层博弈:高并发下的陷阱与破局之道
  • 基于AD7147电容触摸芯片与STC12C5A60S2单片机方案
  • 美颜图像开源数据集
  • AI 学习总结(3)—— AI 智能体零基础入门
  • python学习-读取csv大文件
  • SSL VPN技术
  • 拼多多视觉算法面试30问全景精解
  • 分布在内侧内嗅皮层(MEC)的边界细胞对NLP中的深层语义分析的积极影响和启示
  • ESP32-Cam三脚架机器人:DIY你的智能移动监控平台
  • 性能测试-从0到1搭建性能测试环境Jmeter+Grafana+influxDB+Prometheus+Linux
  • Redis RDB 持久化实现原理,请求是否阻塞,如何处理阻塞请求
  • 【运维】SGLang 安装指南