数据结构,线性表,顺序表基础。

news2024/12/23 22:25:11

 

 

1.线性表

              线性表特征:

             

  1. 对非空表,a0是表头,无前驱
  2. a(n-1)是表尾,无后继
  3. 其他的都有ai前驱a(i-1)与后继a(i+1)。

 2、顺序结构存储方式是线性表存储的一种方式,主要体现形式为数组。

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 10
typedef int data_t;

typedef struct list{
    data_t data[SIZE];//保存数据的数组(表)
    data_t last;//保存尾元素的下标

} seqlist,*seqlist_t;

//创建顺序表
seqlist* create_selist()
{
		seqlist_t head =(seqlist*) malloc (sizeof(seqlist));
			if(NULL==head) return NULL;
			memset(head->data,0,sizeof(head->data));
			head->last=-1;//表示空
			return head;//返回表头
}
//判空:
	int seqlist_is_empty(seqlist* head)
{
		if(NULL==head) return -1;
		return (-1==head->last)?1:0;
}
//判满
int seqlist_is_full(seqlist * head)
{
	if(NULL==head) return -1;
		return (SIZE==head->last+1)?1:0;
}
//求元素个数
int seqlist_is_num(seqlist * head)
{
	if(NULL==head) return -1;
		return (head->last+1);
}
//指定位置增加元素
int seqlist_is_install(seqlist * head,int pos,data_t val)
{
	if(NULL==head) return -1;//指向为空
    if(1==seqlist_is_full(head)) return -2; //线性表已经满了
    
    #if 1
    int i=seqlist_is_num(head);//1、数量初始化i
    for ( i ; i>pos; i--)//此处i可以等于也可以不等于pos
    {
        head->data[i]=head->data[i-1];
    }
    #else   
    int i=head->last;//2、下标初始化i 
    for ( i ; i>=pos; i--)
    {
        head->data[i+1]=head->data[i];
    }
    #endif
    

    head->data[pos]=val;
    head->last++;
    return 0;
}
//指定位置删除元素
int seqlist_is_del(seqlist * head,int pos)
{
	if(NULL==head) return -1;//指向为空
    if(1==seqlist_is_empty(head)) return -2; //线性表为空
    for (int i=pos;i<head->last; i++)
    {   
        head->data[i]=head->data[i+1];
    }
    head->last--;
    return 0;
}
//修改指定位置元素
int seqlist_is_change(seqlist * head,int pos,int val)
{
	if(NULL==head) return -1;//指向为空
    if(1==seqlist_is_empty(head)) return -2; //线性表为空
        head->data[pos]=val;
    return 0;
}
//查找元素
int seqlist_is_find(seqlist * head,int val)
{
	if(NULL==head) return -1;//指向为空
    if(1==seqlist_is_empty(head)) return -2; //线性表为空
    for (int i = 0; i<=head->last; i++)
    {
        if(head->data[i]==val)
        {
            return i;
        }
    }
    return -1;
}
//输出数组
int seqlist_is_print(seqlist *head)
{  
    if(NULL==head) return -1;//线性表为空
    for (int i = 0; i <seqlist_is_num(head); i++)
        {
           printf("%d ",head->data[i]);
        }
        puts("");
}

int main()
{
    seqlist * phead=create_selist();
    seqlist_is_install(phead,0,1);
    seqlist_is_install(phead,1,2);
    seqlist_is_install(phead,2,3);
    seqlist_is_install(phead,3,4);
    seqlist_is_install(phead,4,5);
    seqlist_is_install(phead,5,6);
   //seqlist_is_install(phead,2,1233);
    seqlist_is_change(phead,3,11111);
    int k=seqlist_is_find(phead,3);

    if(k>-1)
    {
        printf("找到位置为%d\n",k);
    }
    else
    {
        printf("不存在要找的数\n");
    }
    
   // seqlist_is_del(phead,3);
    seqlist_is_print(phead);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/892775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

密码学学习笔记(十八):Diffie–Hellman (DH) 密钥交换

DH算法是第一个密钥交换算法&#xff0c;也是第一个得到形式化描述的公钥密码算法。 群论 DH密钥交换算法基于数学中的群论&#xff0c;群论也是当今大多数公钥密码的基础。 要使集合及其运算成为一个群&#xff0c;需要满足以下性质&#xff1a; 封闭性&#xff1a;群中两…

Eureka 的几种主动下线服务的方式

补充&#xff1a;在启动eureka服务的时候发现控制台有以下的输出 由此猜想可以通过改接口下线服务&#xff0c; 于是尝试了一下。 果然能从注册中心中移除该实例。 1. 直接停掉服务。 默认情况下&#xff0c;如果Eureka Server在90秒没有收到Eureka客户的续约&#xff0c;它…

树莓派+WordPress:打造专属博客,内网穿透轻松发布到公网!

概述 在本次教程里&#xff0c;我们将在树莓派上搭建一个Wordpress博客站点&#xff0c;开始博客时代&#xff0c;记录生活点滴。同时做内网穿透将博客发布上线&#xff0c;让互联网用户都可以访问到&#xff0c;无需公网ip&#xff0c;也无需购买云服务器&#xff0c;简单快速…

内网隧道代理技术(十六)之 FRP的使用

FRP的使用和介绍 FRP介绍 FRP (Fast Reverse Proxy) 是一个使用 Go 语言开发的高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务。FRP 支持 TCP、UDP、HTTP、HTTPS等协议类型,他支持点对点的转发,还有全流量转发,FRP最大的一个特点是使用SOCKS代理,而SOCKS…

10----超链接

在 Markdown 里可以创建超链接&#xff0c;以链接到其他 Markdown 页面或网站。 一、行内超链接&#xff1a; 行内式超链接是Markdown中创建超链接的一种方式&#xff0c;它的语法相对简单&#xff0c;适合在文本中直接插入链接。 1.链接到网站&#xff1a;[链接文本](链接地…

排序+运算>直接运算的效率的原因分析

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Facebook 应用未启用:这款应用目前无法使用,应用开发者已得知这个问题。

错误&#xff1a;Facebook 应用未启用:这款应用目前无法使用&#xff0c;应用开发者已得知这个问题。应用重新启用后&#xff0c;你便能登录。 「应用未经过审核或未发布」&#xff1a; 如果一个应用还没有经过Facebook的审核或者开发者尚未将应用发布&#xff0c;那么它将无法…

MySQL数据库——图形化界面工具(DataGrip),SQL(2)-DML(插入、修改和删除数据)

目录 图形化界面工具&#xff08;DataGrip&#xff09; 下载及安装 启动及连接 使用 创建数据库 创建表结构 编写SQL DML 插入 更新和删除 1.修改数据 2.删除数据 总结 图形化界面工具&#xff08;DataGrip&#xff09; 下载及安装 DataGrip下载链接&#xff1a;…

如何使用HTML5新增的表单元素来增强表单功能?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 1. <input type"email"> 和 <input type"url">⭐ 2. <input type"tel">⭐ 3. <input type"date">、<input type"time"> 和 <input type"datet…

求解方程sympy.solve

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 求解方程 sympy.solve [太阳]选择题 下列代码最后一次输出的结果是&#xff1f; import sympy x sympy.symbols(x) y x**2 2*x - 3 print("【执行】sympy.solve(y, x)") print(s…

TIA博途中打开全局库al文件以及压缩库zal文件的具体方法示例

TIA博途中打开全局库al文件以及压缩库zal文件的具体方法示例 本例中所有的库文件均以博途V15软件为例进行说明,其他版本的博途软件可能稍有区别,但总体相同。 如下图所示,打开博途软件后,在右侧的“库”—全局库,点击打开图标, 如下图所示,此时在弹出的窗口中找到后缀名…

华为OD机试 - 执行时长 - 回溯(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、大概意思就是&#xff1a;2、比如&#xff1a; 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff…

JavaWeb框架:Spring MVC介绍

Spring MVC 概述 概述 MVC&#xff08;Model View Controller&#xff0c;模型-视图-控制器&#xff09;&#xff0c;作为一种设计模式&#xff0c;用于应用程序的分层开发。 Spring MVC&#xff0c;由 Spring 框架提供的基于 MVC 设计模式的一个轻量级 Web 开发框架。Spring…

Android Studio连接逍遥模拟器

1、启动Android Studio&#xff0c;打开和同步好项目。 2、启动逍遥模拟器&#xff0c;会自动连接Android Studio。 3、运行app到模拟器中即可。 4、如果第二步启动后没有自动连接&#xff0c;就需要我们手动连接&#xff0c;进入安装目录&#xff0c;我的是D:\Xiaoyao moniqi\…

【Java】Java如何生成随机数?

文章目录 前言一、Random类介绍二、Random类生成随机数1.生成随机数2.nextInt()方法 三、使用场景四、官方提示总结 前言 我们在学习 Java 基础时就知道可以生成随机数&#xff0c;可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。 一、Random类介绍 …

在CentOS7.9上安装最新版本Docker安装步骤

1、查看系统版本&#xff1a; cat /etc/redhat-release 2、卸载原有版本&#xff08;如有的话&#xff09; sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ d…

linux学习(文件描述符)[11]

一切皆文件 用代码创建的文件&#xff0c;默认路径在可执行文件同级目录下&#xff08;本质是进程通过系统接口创建的&#xff09; 文件宏 在Linux下&#xff0c;有一些与文件操作相关的宏可以用于处理文件描述符和文件权限。以下是一些常用的文件宏&#xff1a; STDIN_FIL…

算法通关村第4关【白银】| 栈的经典算法问题

1.括号匹配问题 思路&#xff1a;将左括号压入栈中&#xff0c;遍历字符串&#xff0c;当遇到右括号就出栈&#xff0c;判断是否是匹配的一对&#xff0c;不是就返回false&#xff08;因为按照顺序所以当遇到右括号出栈一定要是匹配的&#xff09;。使用Map来简化ifelse clas…

单片机中绝对地址转换为函数指针

一、相关概念 函数指针和指针函数是两个不同的概念。 函数指针是指可以指向函数的指针&#xff0c;它的类型与函数的返回值类型和参数类型相对应。通过函数指针&#xff0c;可以实现函数的回调和动态调用等功。 指针函数则是指返回指针类型的函数&#xff0c;它的返回值是一个指…

关于CDN加速和负载均衡技术的讨论

一&#xff1a;前言 相信学习到信息收集模块的小伙伴在学习Web信息收集中查找真实IP相关知识点时&#xff0c;必定接触到一个概念&#xff1a;CDN加速。那么什么是CDN&#xff1f;企业为什么要用CDN&#xff1f;就是为了隐藏自己的真实IP&#xff1f;显然不是。经济学中有一个概…