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

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.xdnf.cn/news/15989.html

相关文章:

  • Linux系统权限全面解析:掌握你的数字王国钥匙
  • docker pull 用法
  • PHP获取淘宝拍立淘(以图搜图)API接口操作详解
  • CSS+JavaScript 禁用浏览器复制功能的几种方法
  • 【前端】ikun-pptx编辑器前瞻问题二: pptx的压缩包结构,以及xml正文树及对应元素介绍
  • SSL VPN技术
  • 基于 KeepAlived + HAProxy 搭建 RabbitMQ 高可用负载均衡集群
  • 傲软录屏 专业高清录屏软件 ApowerREC Pro 下载与保姆级安装教程!!
  • v0+claude+cursor构建初始脚手架
  • 嵌入式学习-土堆目标检测(2)-day26
  • MySQL中的多表查询和笛卡尔积问题
  • vscode,cursor,Trae终端不能使用cnpm、npm、pnpm命令解决方案
  • n1 armbian docker compose 部署aipan mysql
  • HTML结构解析
  • 防抖的实战例子 - 常用语echarts图中点击事件的例子
  • 拥抱区块链红利:机遇无限,风险暗涌
  • Clickhouse源码分析-副本数据同步
  • gpt面试题
  • SQL通用增删改查
  • 如何使用电脑连接小米耳机(红米 redmi耳机)
  • 学习秒杀系统-异步下单(包含RabbitMQ基础知识)
  • RS485和Modbus
  • 全新开发范式:uni-app X助力全平台原生应用
  • 前端,demo操作,增删改查,to do list小项目
  • 网络编程及原理(八)网络层 IP 协议
  • 企业开发转型 | 前端AI化数字化自动化现状
  • C语言字符串相关函数
  • 若依开源框架相关
  • Telink BLE 低功耗学习
  • 板凳-------Mysql cookbook学习 (十二--------3_2)