作业:线性表2.1

C语言 单向列表操作详解 > 学习分享,如若觉得有错误或有更好见解,欢迎评论或者私信指点< 阅读详情

#include <stdio.h>
#include <malloc.h>

#define LIST_MAX_LENGTH 10

typedef struct SequentialList {
    int actualLength;

    int data[LIST_MAX_LENGTH]; 
} *SequentialListPtr;

void outputList(SequentialListPtr paraList) {
    for (int i = 0; i < paraList->actualLength; i++) {
        printf("%d ", paraList->data[i]);
    }
    printf("\r\n");
}

void outputMemory(SequentialListPtr paraListPtr) {
    printf("The address of the structure: %ld\r\n", paraListPtr);
    printf("The address of actualLength: %ld\r\n", &paraListPtr->actualLength);
    printf("The address of data: %ld\r\n", &paraListPtr->data);
    printf("The address of actual data: %ld\r\n", &paraListPtr->data[0]);
    printf("The address of second data: %ld\r\n", &paraListPtr->data[1]);
}

SequentialListPtr sequentialListInit(int paraData[], int paraLength) {
    SequentialListPtr resultPtr = (SequentialListPtr)malloc(sizeof(struct SequentialList));
    for (int i = 0; i < paraLength; i++) {
        resultPtr->data[i] = paraData[i];
    }
    resultPtr->actualLength = paraLength;

    return resultPtr;
}

void sequentialListInsert(SequentialListPtr paraListPtr, int paraPosition, int paraValue) {
    if (paraListPtr->actualLength >= LIST_MAX_LENGTH) {
        printf("Cannot insert element: list full.\r\n");
        return;
    }

    if (paraPosition < 0) {
        printf("Cannot insert element: negative position unsupported.");
        return;
    }
    if (paraPosition > paraListPtr->actualLength) {
        printf("Cannot insert element: the position %d is bigger than the list length %d.\r\n", paraPosition, paraListPtr->actualLength);
        return;
    }

    for (int i = paraListPtr->actualLength; i > paraPosition; i--) {
        paraListPtr->data[i] = paraListPtr->data[i - 1];
    }

    paraListPtr->data[paraPosition] = paraValue;

    paraListPtr->actualLength++;
}

void sequentialInsertTest() {
    int i;
    int tempArray[5] = { 3, 5, 2, 7, 4 };

    printf("---- sequentialInsertTest begins. ----\r\n");

    SequentialListPtr tempList = sequentialListInit(tempArray, 5);
    printf("After initialization, the list is: ");
    outputList(tempList);

    printf("Now insert to the first, the list is: ");
    sequentialListInsert(tempList, 0, 8);
    outputList(tempList);

    printf("Now insert to the last, the list is: ");
    sequentialListInsert(tempList, 6, 9);
    outputList(tempList);

    printf("Now insert beyond the tail. \r\n");
    sequentialListInsert(tempList, 8, 9);
    printf("The list is:");
    outputList(tempList);

    for (i = 0; i < 5; i++) {
        printf("Inserting %d.\r\n", (i + 10));
        sequentialListInsert(tempList, 0, (i + 10));
        outputList(tempList);
    }

    printf("---- sequentialInsertTest ends. ----\r\n");
}

int sequentialListDelete(SequentialListPtr paraListPtr, int paraPosition) {
    if (paraPosition < 0) {
        printf("Invalid position: %d.\r\n", paraPosition);
        return -1;
    }

    if (paraPosition >= paraListPtr->actualLength) {
        printf("Cannot delete element: the position %d is beyond the list length %d.\r\n", paraPosition, paraListPtr->actualLength);
        return -1;
    }

    int resultValue = paraListPtr->data[paraPosition];
    for (int i = paraPosition; i < paraListPtr->actualLength; i++) {
        paraListPtr->data[i] = paraListPtr->data[i + 1];
    }

    paraListPtr->actualLength--;

    return resultValue;
}

void sequentialDeleteTest() {
    int tempArray[5] = { 3, 5, 2, 7, 4 };

    printf("---- sequentialDeleteTest begins. ----\r\n");

    SequentialListPtr tempList = sequentialListInit(tempArray, 5);
    printf("After initialization, the list is: ");
    outputList(tempList);

    printf("Now delete the first, the list is: ");
    sequentialListDelete(tempList, 0);
    outputList(tempList);

    printf("Now delete the last, the list is: ");
    sequentialListDelete(tempList, 3);
    outputList(tempList);

    printf("Now delete the second, the list is: ");
    sequentialListDelete(tempList, 1);
    outputList(tempList);

    printf("Now delete the 5th, the list is: ");
    sequentialListDelete(tempList, 5);
    outputList(tempList);

    printf("Now delete the (-6)th, the list is: ");
    sequentialListDelete(tempList, -6);
    outputList(tempList);

    printf("---- sequentialDeleteTest ends. ----\r\n");

    outputMemory(tempList);
}

int locateElement(SequentialListPtr paraListPtr, int paraValue) {
    for (int i = 0; i < paraListPtr->actualLength; i++) {
        if (paraListPtr->data[i] == paraValue) {
            return i;
        }
    }

    return -1;
}

int getElement(SequentialListPtr paraListPtr, int paraPosition) {
    if (paraPosition < 0) {
        printf("Invalid position: %d.\r\n", paraPosition);
        return -1;
    }

    if (paraPosition >= paraListPtr->actualLength) {
        printf("Cannot get element: the position %d is beyond the list length %d.\r\n", paraPosition, paraListPtr->actualLength);
        return -1;
    }

    return paraListPtr->data[paraPosition];
}

void clearList(SequentialListPtr paraListPtr) {
    paraListPtr->actualLength = 0;
}

void main() {
    sequentialInsertTest();
    sequentialDeleteTest();
}

作业 线性表练习 线性表练习 1-1对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。(2分) T 1-2对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。(2分) F 1-3循环链表不是线性表。 (2分) F 1-3答案正确(2 分)1-4顺序存储的线性表可以随机存取。(2分) T 1-4答案正确(2 分)1... 阅读详情

相关推荐

软基作业——顺序线性表的插入

题目如下:设线性表存放在向量A[1..MAXNUM]的前elenum个分量中,且递增有序。试写一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。 我的程序如下: 1. test.c #include "insert.h" #include int main(void) { listtype list; int i; float elenum;

pdcxs007的专栏 3577

列表基本知识和常用操作

列表的增删查改等常用操作。

weixin_48118301的博客 3560

线性表作业

文章目录顺序表的转置答案单链表的转置答案两有序链表组成新的有序链表答案 顺序表的转置 1、请完成下列算法填空实现对顺序表逆置存储,逆置存储是指将元素线性关系逆置后的顺序存储,例如(a0,a1,a2),关系逆置后为(a2,a1,a0). SeqList的结构体定义如下: typedef struct seqList { int n; int maxLength; E...

我想成长的快一点,再快一点... 1489

C语言-数据结构-列表

全军出击线性表线性表的本质线性表的操作线性表的顺序存储结构获得元素的操作插入元素的操作删除元素操作链式存储结构获取第pos个元素的操作插入操作删除操作 线性表 顺序表 链式表 线性表的本质 定义: 由0个或多个数据元素的集合 数据元素之间是有顺序的 数据元素的个数是有限个 数据元素的类型必须相同 专业的定义: 线性表是具有相同类型的n(n>=0)个数据元素的有限序列 (a0,a1,a2,..an) ai是表项,n是长度 性质: a0为线性表的第一个元素,只有一个后继 an

卜陋专酱 8044

跟着团子学SAP CO:揭秘结果分析码在项目结算中的实战应用(一)KKA2/CJ88

本文深入解析了SAP CO模块中结果分析码在项目结算中的核心作用。以KKA2(方法10)和事务代码CJ88为例,详细阐述了如何在项目完工后一次性确认收入的场景下,通过结果分析功能实现收入与成本的精准匹配,将项目成本暂估为在制品,确保各期利润的准确反映。

gamma的博客 687

Windows环境下IBSIMU的安装

本文主要介绍离子束仿真程序IBSIMU在Windows环境下的安装。

C_Tso的博客 2994

创建列表方法

创建列表

weixin_43811239的博客 4801

Aspen Plus下载教程Aspen Plus V14 保姆级安装步骤(附安装包)

26、在WlmAdmin界面中,依次点击【Subnet Servers】、【admin】、【Add Feature】、【From a File】、【To Server and its File】。35、在产品选择页面,勾选需要安装的所有产品(重要:不要勾选【Aspen Online(Plant Data)】),然后点击【File Location】。回到桌面,点击任务栏的【开始菜单】,在【所有应用】中找到【Aspen Plus V14】软件图标,将其拖到桌面上创建快捷方式。9、这里可以更改软件的安装位置。

ps_xiaowang的博客 1万+

C语言:链表(List)与顺序表(SeqList)

在单链表中,如果要删除指定位置的节点,需要知道指定位置之前的节点,以便修改前一个节点的next指针来跳过当前节点,从而实现删除操作。由于单链表的节点只能通过next指针找到下一个节点,无法直接找到前一个节点,因此删除指定位置的节点比较麻烦,需要遍历链表找到指定位置之前的节点。这是因为在单链表中,如果要在指定位置之前插入节点,需要知道指定位置之前的节点,而单链表的节点只能通过next指针找到下一个节点,无法直接找到前一个节点。1、静态顺序表是在程序运行前就确定了大小的数组,数组的大小是固定的,不能动态改变。

MaoRuofeng的博客 2725

Arxml文件可视化:当汽车软件架构遇见交互式设计工具

本文探讨了Arxml文件在汽车电子系统开发中的可视化技术,结合AUTOSAR架构标准,介绍了如何利用现代Web技术构建交互式设计工具。通过三维组件关系图、动态数据流展示和版本对比等功能,显著提升开发效率和架构评审质量,适用于MBD和ASPICE开发流程。

weixin_29050271的博客 429

地图之家总目录

地图之家总目录 cesium示例 leaflet示例

GIS之家家长 1万+

数据结构 作业答案 第2章 线性表

第2章 线性表 1.选择题 (1)顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。 A.110 B.108 C.100 D.120 答案:B 答案解析:顺序表中的数据连续存储,所以第5个元素的地址为:100+2*4=108。 (2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( )。 A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) B.在第i个结点后插入一个新结点(1

HKD_WCY的博客 1万+

5、数据库基础概念与数据建模全解析

本文深入解析了数据库的基础概念,包括函数依赖、决定因素和多值依赖等关键依赖关系,同时探讨了数据建模的重要方法论,如IDEF1X、信息工程和陈方法。此外,还介绍了SQL Server管理工作室的图表功能,帮助用户进行数据库的可视化设计。通过本文,读者将掌握数据库设计的核心知识,为构建高效、可扩展的数据库系统奠定基础。

81

博客作业2---线性表

一、PTA实验作业 1.题目1:线性表元素的区间删除 2. 设计思路(伪代码或流程图) 定义i,len两个变量,令len=0 for i=0 to L->Last 如果Data[i]的值在(minD,maxD)之外 重构数组Date[len++]=Data[i] L->Last=--len 返回L 3...

aa467858的博客 201

SAP S4 HANA:按单生产(MTO)场景中的COGS分割

本文介绍了SAP S/4HANA中提供的各种选项,以在销售订单/商品是按订单生产(以下称为MTO)生产流程中的成本对象时,在基于帐户的COPA环境中报告COGS分割信息。

adam915的博客 1192

pycharm下载continue插件接入DeepSeek的API,向其提问输出乱码,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2227

数据结构作业_线性表

数据结构第一次作业:线性表。 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 1024 typedef int elemtype; typedef struct sequlist { elemtype data[MAXSIZE]; int last; } SequenList; /...

落末的博客 671

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数据结构作业之线性表求并集

数据结构作业,两个线性表求并集 #include <stdio.h> #include <stdlib.h> typedef struct lnode { int data; struct lnode *next; }Lnode,*Linklist; int initlinklist(Linklist &L) { L=(Linklist)malloc(s...

氧化钙的博客 1570

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

chap2 线性表作业(判断+选择)

判断题 1-1 对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。 (1分) T 1-2 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。 (2分) T 1-3 对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。 (1分) ...

寒舟不渡的博客 7980

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

21.1线性表顺序存储结构作业

1.写一个函数,功能为去除线性表中的重复元素(例如:1、1、1、2、3、4、4、5、6,去 重之后为1、2、3、4、5、6); 2、写一个函数,功能为线性表的合并La = La U Lb(例如:La:1、2、3、4;Lb:4、5、 6、7;合并之后La:1、2、3、4,、5、6、7;Lb:4、5、6、7); 一共两道题,看上去还挺没思路的。 一个是去重操作,一个是合并,在实现之前我们先...

lzs940320的博客 2267

线性表练习作业

线性表练习 1-1对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。T 作者: DS课程组单位: 浙江大学1-1答案正确(2 分) 1-2对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。F 作者: 徐镜春单位: 浙江大学1-2答案正确(2 分) 1-3循环链表不是线性表。F 作者: 李廷元单位: 中...

akyzz_15082282的博客 2498

《数据结构》第二章 线性表 教学设计1

一、课前预习任务 学习资料     资料1. 教材第一章Page 1-16     资料2. 辅导材料第一章Page 3-8     资料3. 三个教学个视频     资料4. 三个教学PPT文档 学习任务     根据前面学习,课前任务简化一些,将全部使用“4题制”:3个课前作业,1个课后升级作业。 1、学习资料1和资料2,即学习课本和辅导教材,看3个教学视频(视频

明哥的专栏 3242
下一篇: 作业第二节:单链表
dev_cc_
博客等级 码龄3年 41粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值