实验一 线性表的基本操作

简介: 一、线性结构的顺序表基本操作 实验目的 1.学会定义单链表的结点类型、线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。

一、线性结构的顺序表基本操作
实验目的
1.学会定义单链表的结点类型、线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。
3.掌握对多函数程序的输入、编辑、调试和运行过程。
实验要求
1.预习C语言中结构体的定义与基本操作方法。
2.对顺序表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
实验内容
1.编写程序实现顺序表的下列基本操作:
(1)初始化顺序表La。
(2)将La置为空表。
(3)销毁La。
(4)在La中插入一个新的元素。
(5)删除La中的某一元素。
(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。
(7)打印输出La中的元素值。
2.(选做)编写程序完成下面的操作:
(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。
(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。
(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。
二、单链表基本操作(选做)
实验目的
1. 学会定义单链表的结点类型、线性表的链式存储类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。
2. 掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。
实验要求
1.预习C语言中结构体的定义与基本操作方法。
2.对单链表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
实验内容
1.编写程序完成单链表的下列基本操作:
(1)初始化单链表La。
(2)在La中插入一个新结点。
(3)删除La中的某一个结点。
(4)在La中查找某结点并返回其位置。
(5)打印输出La中的结点元素值。
2.构造一个单链表L,其头结点指针为head,编写程序实现将L逆置。(即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。)


附:代码
c++下运行:

#include<stdio.h>
#include<stdlib.h>

//顺序表的定义:
#define ListSize 100//表空间大小可根据实际需要而定,这里假设为100
typedef int DataType;//DataType可以是任何相应的数据类型如int ,float,char.
typedef struct SeqList
{
    DataType data[ListSize];  //向量data 用于存放表节点
    int length;              // 当前的表达长度
}SeqList;

int main()
{
    struct SeqList L;
    int i,k,x,n;
//函数声明
    struct SeqList DeleteList(SeqList L,int i);
    struct SeqList InitList(struct SeqList L);
    struct SeqList CreateList(struct SeqList L,int n);
    struct SeqList InsertList(SeqList L,DataType x,int k);
    void PrintList(SeqList L);
    int LocateList(SeqList L,DataType x);
    //初始化表
    L=InitList(L);
//建立顺序表
    printf("输入表中元素数量n\n");
    scanf("%d",&n);
    L=CreateList(L,n);
    printf("输入的元素为:\n");
    PrintList(L);
//查找数据
    printf("输入需要查找的数据:\n");
    scanf("%d",&x);
    if(LocateList(L,x)==0)
        printf("该元素不存在。。。\n");
      else{
        printf("该元素的位置为:\n");
         printf("%d",LocateList(L,x));
      }

    printf("\n");
    //插入数据
    printf("输入插入的数据 x=");
    scanf("%d",&x);
    printf("输入插入的位置 k=");
    scanf("%d",&k);
    printf("\n插入 数据前的表:\n");//表插入前后对比性输出
    PrintList(L);
    L=InsertList(L,x,k);
    printf("\n插入 数据后的表:\n");//表插入前后对比性输出
    PrintList(L);
    //删除数据
        printf("输入删除的位置 k=");
    scanf("%d",&k);
    printf("\n删除 数据前的表:\n");//表删除前后对比性输出
    PrintList(L);
    L=DeleteList(L,k);
    printf("\n删除 数据后的表:\n");//表删除前后对比性输出
    PrintList(L);
    return 0;

}
//初始化顺序表
struct SeqList InitList(struct SeqList L)
{
    L.length=0;
    return L;
}
//顺序表的建立
struct SeqList CreateList(struct SeqList L,int n)
{
    int i;
    printf("请输入%d个元素:\n",n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&L.data[i]);
        L.length++;
    }
    return L;
}

void PrintList(SeqList L)
{
    int i;
    if(L.length==0)
    {
        printf("此表为空...\n");
        return ;
    }
    for(i=0;i<L.length-1;i++)
    {
        printf("%d ",L.data[i]);
    }
    printf("%d\n",L.data[i]);
}

int LocateList(SeqList L,DataType x)
{
    int i;
    if(L.length==0)
        printf("该顺序表为空。。。\n");
    for(i=0;i<L.length;i++)
    {   if(x==L.data[i])
            return i+1;
    //printf("**\n");
    }
    return 0;
}
struct SeqList InsertList(SeqList L,DataType x,int k)
{
    int i;
    if(k<0||k>L.length)
    {
        printf("输入位置非法。。");
        return L;
    }
    if(L.length==ListSize)
    {
        printf("表上溢,不能插入\n");
        return L;
    }
    for(i=L.length;i>=k;i--)
        L.data[i]=L.data[i-1];
    L.data[k-1]=x;
    L.length++;
    return L;
}

struct SeqList DeleteList(SeqList L,int i)
{
    int j;
    for(j=i-1;j<L.length;j++)
        L.data[j]=L.data[j+1];
    L.length--;
    return L;
}
目录
相关文章
|
监控 数据挖掘 API
京东商品历史价格 API 接口系列(京东 API)
本文介绍了如何使用京东开放平台API获取商品价格信息。首先,需注册账号并创建应用以获取App Key和App Secret,进而获取Access Token。准备好开发工具后,通过调用`jd.item_search`和`jd.item_get`接口,可以分别按关键字搜索商品和获取指定商品的详细信息及价格。示例代码展示了如何使用Python的requests库进行API请求。应用场景包括价格监控、商家定价策略、电商平台数据分析及商业智能决策支持。
1084 10
数据清理的遗留问题处理
最近处理一个遗留问题,感觉手动修复真是让人抓狂,所以花了点力气写了一个半自动的脚本,总算从这个繁琐的工作中解放出来了。 问题的背景如下图所示。 存在一个很大的统计库(有容灾备库),还有一个历史统计库,历史统计库中都是相对较老的数据。
1062 0
|
7天前
|
人工智能 安全 API
CoPaw:5分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
10天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
11170 89
|
8天前
|
人工智能 安全 JavaScript
阿里云上+本地部署OpenClaw(小龙虾)新手攻略:解锁10大必备Skills,零基础也能玩转AI助手
2026年,开源AI代理工具OpenClaw(昵称“小龙虾”)凭借“能实际做事”的核心优势,在GitHub斩获25万+星标,成为现象级AI工具。它最强大的魅力在于可扩展的Skills(技能包)系统——通过ClawHub插件市场的数百个技能,能让AI助手从简单聊天升级为处理办公、学习、日常事务的全能帮手。
7141 23
|
9天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
6747 14
|
6天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
5109 9
|
3天前
|
人工智能 JavaScript 测试技术
保姆级教程:OpenClaw阿里云及本地部署+Claude Code集成,打造全能 AI 编程助手
在AI编程工具百花齐放的2026年,Anthropic推出的Claude Code凭借72.5%的SWE-bench测试高分、25倍于GitHub Copilot的上下文窗口,成为开发者追捧的智能编程助手。但单一工具仍有局限——Claude Code擅长代码生成与审查,却缺乏灵活的部署与自动化执行能力;而OpenClaw(前身为Clawdbot)作为开源AI代理框架,能完美弥补这一短板,通过云端与本地双部署,实现“代码开发-测试-部署”全流程自动化。
2025 13