Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >实验一 线性表的基本操作

实验一 线性表的基本操作

作者头像
谙忆
发布于 2021-01-20 07:55:41
发布于 2021-01-20 07:55:41
72500
代码可运行
举报
文章被收录于专栏:程序编程之旅程序编程之旅
运行总次数:0
代码可运行

一、线性结构的顺序表基本操作 实验目的 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++下运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/11/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
期末复习之数据结构 第2章 线性表
#include <iostream> using namespace std; #define ElemType int #define Status int #define MAXSIZE 100 typedef struct LNode { ElemType data;//数据域 struct LNode* next;//指针域 }LNode, * LinkList; Status InitList(LinkList& L) { L = new LNode; L->next = NULL; return 1; } Status InsertList(LinkList& L, int pos, ElemType e) { LNode* s; LinkList p = L; int j = 0; while (p&&(j<pos-1)) { p = p->next; ++j; } if (!p || j > pos - 1) { return 0; } s = new LNode; s->data = e; s->next = p->next; p->next = s; return 1; } int main() { LinkList P; InitList(P); int num; cout << "请输入整数,按ctrl+z结束输入" << endl; int Length = 1; while (cin>>num) { Length++; InsertList(P, Length, num); } cout <<"单链表结点个数为:"<< Length-1 << endl; }
henu_Newxc03
2021/12/28
7080
期末复习之数据结构 第2章 线性表
线性结构------线性表(一)
------线性表(Linear List)由有限个类型相同的数据元素组成,除了第一个元素和最后一个元素外,其他元素都有唯一的前驱元素和唯一的后继元素。
刘开心_1266679
2019/02/14
4550
C语言--顺序表的实现
#include<stdio.h> #define list_init_size 100 typedef struct{ int data[list_init_size]; int length; }Seqlist; void creat(Seqlist &L);//建立线性表 void show(Seqlist L);//显示线性表 void insert(Seqlist &L,int position,int e); //插入数据e,位置为position void so
王也518
2022/10/26
1.5K0
数据结构与算法 -线性表顺序存储及其相关算法
(2). 顺序表要求占用连续的空间,存储分配只能预先进 行,因此当表长变化较大时,难以确定合适的存储规模。
越陌度阡
2020/11/26
7110
数据结构与算法 -线性表顺序存储及其相关算法
数据结构—线性表
本篇开始,又会开始一个新的系列,数据结构,数据结构在算法或者是编程中的重要性不言而喻,所以学好数据结构还是很有必要的。本篇主要介绍数据结构的第一个结构——线性表,主要分为以下几部分: 1.概念 2.存储结构
张俊红
2018/07/30
7010
数据结构—线性表
数据结构(三):线性表
该序列中所含的元素个数叫做线性表的长度,用 n表示(n>=0)。当 n=0时,表示线性表是一个空表,即表中不包含任何数据元素。
渔父歌
2018/09/10
8160
线性表
线性表的顺序存储指的是将线性表的数据元素按其逻辑次序依次存入一组地址连续的存储单元里,用这种方法存储的线性表称为顺序表。
ianzhi
2019/07/31
3380
【数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
Rossy Yan
2024/12/24
580
【数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
线性表的顺序表示和实现(参考严蔚敏版)
在顺序表中,删除一个元素和插入一个元素的操作非常相似。删除一个元素即是将i位置之后的所有元素向前移一位。
跋扈洋
2021/05/19
8360
线性表的顺序表示和实现(参考严蔚敏版)
数据结构(1)-线性表
线性表是一种常用的数据结构。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。  线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。
黄规速
2022/04/14
2350
【数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
Rossy Yan
2024/12/24
890
【数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
线性表的基本代码(存储结构、插入、删除)c语言
一、线性表的顺序/单链表存储的结构代码 顺序存储 #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length; }SqList; 链式存储 typedef struct Node { ElemType data; struct Node* next; }Node; typedef struct Node* LinkList; 顺序存储的插入、删除操作 Status ListI
亦小河
2022/11/14
1.1K0
顺序线性表
线性表的顺序表示和实现 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。 线性表的第一个数据元素a1的存储位置,通常称作线性表的起始位置或基地址。 只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。 数组类型有随机存取的特性,因此通常都用数组来描述数据接哦故中的顺序存储结构。由于线性表的长度可变,且所需最大存储空间随问题不同而不同,在C语言中可用动态分配的一维数组,如下描述。 /* 线性表的动态分配顺序存储结构 */
猿人谷
2018/01/17
7620
顺序线性表
线性表学习
线性表是最常用也是最简单的一种数据结构,一个线性表是n个数据元素的有限序列。 线性表的基本结构: 1 typedef struct xianxing{ 2 int length; 3 int *data; 4 }L; 其中int *data也可以换成是一个数组,如int data[maxsize];maxsize你自己定咯,我这里用指针,然后初始化的时候申请动态空间。 上面是基本结构,然后要初始化咯,就是给他赋初值啦。代码如下: 1 int InitList(xian
用户1749219
2018/05/16
6120
线性表的顺序存储
线性表的顺序表示:用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称为线性表的顺序存储结构或顺序映像。通常,称这种存储结构的线性表为顺序表(Sequential List)。
老齐
2023/03/02
1.6K0
线性表的顺序存储
c语言数据结构与算法--简单实现线性表(顺序表+链表)的插入与删除
线性表是由n个数据元素组成的有限序列,每个元素都有唯一的下标,下标从0开始递增。线性表的元素之间存在一对一的线性关系,即除首元素外,每个元素有且只有一个前驱元素,除尾元素外,每个元素有且只有一个后继元素。线性表可以通过顺序存储或链式存储来实现。线性表的基本操作包括初始化、创建、增加、删除和查找等。
用户11404404
2024/12/13
1300
c语言数据结构与算法--简单实现线性表(顺序表+链表)的插入与删除
数据结构之线性表
基本概念 线性表(List):由零个或多个数据元素组成的有限序列。 特征: 1.线性表是一个序列。 2.0个元素构成的线性表是空表。 3.线性表中的第一个元素无前驱,最后一个元素无后继,其他元素有且只有一个前驱和后继。 4.线性表是有长度的,其长度就是元素个数,且线性表的元素个数是有限的,也就是说,线性表的长度是有限的。 线性表抽象数据类型 基于线性表的特征,线性表可以做如下操作:  InitList(*L);//初始化操作,建立一个空的线性表  ListEmpty(L);//若线性表为空,返回true,否
xiangzhihong
2018/02/05
7170
数据结构之线性表
静态&动态分配线性表
线性表的顺序存储又称顺序表,它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而是的逻辑上相邻的两个元素在物理位置上也相邻。
炒香菇的书呆子
2021/03/16
8060
线性表详解01
看着比较复杂,这就是结构体,struct typedef是重命名,比如这个重命名为了SqList
学编程的小程
2023/10/11
1620
【自考】数据结构中的线性表,期末不挂科指南,第2篇
首先假定线性表的数据元素的类型为DataType ,这个DataType 可以是自定义的,也可以是默认的int,char等类型
梦想橡皮擦
2019/12/12
5480
【自考】数据结构中的线性表,期末不挂科指南,第2篇
相关推荐
期末复习之数据结构 第2章 线性表
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验