顺序表的基本操作

2023-10-27

目录

一、实验要求

二、代码实现

三、运行结果


一、实验要求


    1、验证性实验:实现顺序表的基本操作
实验内容:编写一个程序sqlist.cpp (或.c),
        实现顺序表的各种基本运算和整体建表算法(假设顺序表的内容类型ElemType为char),
        并在此基础上设计一个程序exp1.cpp (或.c)完成一下功能。
(1)  初始化顺序表L。
(2)  将元素a、b、c、d、e依次插入顺序表L中。
(3)  输出顺序表L。
(4)  输出顺序表L的长度。
(5)  判断顺序表L是否为空。
(6)  输出顺序表L的第3个元素。
(7)  输出元素a的位置。
(8)  在第4个元素位置上插入元素f。
(9)  输出顺序表L。
(10) 删除顺序表L的第3个元素。
(11) 输出顺序表L。
(12) 销毁顺序表L。


 

二、代码实现

/*
    1、验证性实验:实现顺序表的基本操作
实验内容:编写一个程序sqlist.cpp (或.c),
        实现顺序表的各种基本运算和整体建表算法(假设顺序表的内容类型ElemType为char),
        并在此基础上设计一个程序exp1.cpp (或.c)完成一下功能。
(1)  初始化顺序表L。
(2)  将元素a、b、c、d、e依次插入顺序表L中。
(3)  输出顺序表L。
(4)  输出顺序表L的长度。
(5)  判断顺序表L是否为空。
(6)  输出顺序表L的第3个元素。
(7)  输出元素a的位置。
(8)  在第4个元素位置上插入元素f。
(9)  输出顺序表L。
(10) 删除顺序表L的第3个元素。
(11) 输出顺序表L。
(12) 销毁顺序表L。
*/

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100 		//线性表最大分配容量
#define LISTINCREMENT 10 		//线性表扩展容量
typedef char ElemType;  //数据元素为字符型

typedef struct 
{
    /* data */
    ElemType *data;	
    int length;
    int listsize;
}sqlist;

//初始化顺序表
int InitList(sqlist *L)
{
	//动态分配:malloc函数申请一片连续的存储空间
    L->data=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->data)
	{
		return ERROR;
	}
    L->length=0;			//初始表长为0
    L->listsize=LIST_INIT_SIZE;
	return OK;
}

//将元素e插入到顺序表L的第k个位置。
int List_Insert(sqlist *L,int k,ElemType e)
{
    int i=0;
    if(!L->data)
    return ERROR;
    if (k>L->length+1|| k<1)//判断插入位置的合法性
    {
        return ERROR;
    }
  if (L->length >= L->listsize)
	{
		char *new_base;   //空间不足,重新分配
		new_base = (char*)realloc(L->data, sizeof(char)*(L->listsize + LISTINCREMENT));
		L->data = new_base;
		if (!L->data)
		{
			return ERROR;
		}
		L->data = new_base;
		L->listsize += LISTINCREMENT; 
	}
	//插入元素e
	if(k<L->length)
	{
		for (i = L->length - 1 ; i>= k - 1; i--)
			L->data[i + 1] = L->data[i];
	}
	L->data[k - 1] = e;
	L->length++;                //多一个元素长度加1
	return OK;
}
//输出顺序表L。
int print_List_data(sqlist *L)
{
    if(!L->data)
    return ERROR;
    for (int i = 0; i < L->length; i++)
    {
        /* code */
        printf("%c  ",L->data[i]);
    }
	printf("\n");
    return OK;
}

//输出顺序表L的长度。
int print_List_Length(sqlist *L)
{
    if(!L->data)
        return ERROR;
    printf("%d\n",L->length);
    return OK;
}
//判断顺序表L是否为空。
int ListEmpty(sqlist *L)
{
    if(!L->data||L->length!=0)
        return ERROR;
    else
        return OK;
}
//输出顺序表L的第i个元素。(该元素e是需要返回给用户的)
int GetElem(sqlist *L, int i, ElemType *e)
{
	if (!L->data)
	{
		return ERROR;
	}
	if (i < 1 || i >= L->length-1)
	{
		return ERROR;     //i值不合法
	}
	*e =L->data[i-1];
	return OK;
}

//输出元素a的位置。(该元素e是不需要返回给用户的)
int LocateElem(sqlist *L, char e)
{
	if (!L->data)
	{
		return ERROR;
	}
    for (int i = 0; i < L->length; i++)
    {
       if (L->data[i]==e)
        {
            return i+1;     //返回元素所在位置
        }
    }
	return OK;
}
// 删除顺序表L的第i个元素。(该元素e是不需要返回给用户的)
int ListDelete(sqlist *L, int i, char e)
{
	int k;
	if (!L->data)
	{
		return ERROR;
	}
	if (i<1 || i>L->length)
	{
		return ERROR;  //i值不合法
	}
	e = L->data[i - 1];
	for (k = i; k <= L->length ;k++)  
		L->data[k - 1] = L->data[k];
		L->length--;        
	return OK;
}
// 销毁顺序表L。
int DestroyList(sqlist *L)
{
	if (!L->data)
	{
		return ERROR;  //表不存在
	}
	else
	free(L->data);      //释放内存 销毁线性表
	printf("	线性表销毁成功!");
	return 0;
}


int main()
{
	sqlist L;
	ElemType e;
	printf("1:初始化顺序表L\n");
	InitList(&L);
	printf("2:依次采用尾插法插入a , b , c , d , e元素\n");
	List_Insert(&L, 1, 'a');
	List_Insert(&L, 2, 'b');
	List_Insert(&L, 3, 'c');
	List_Insert(&L, 4, 'd');
	List_Insert(&L, 5, 'e');
	printf("3:顺序表L:");
	print_List_data(&L);
	printf("4:线性表L表长为:");
	print_List_Length(&L);
	printf("5:顺序表L为:%s\n", (ListEmpty(&L) ? "空" : "非空"));
	GetElem(&L, 3, &e);
	printf("6:顺序表的第3个元素是:%c\n", e);
	printf("7:线性表L中元素a的位置为: %d\n", LocateElem(&L, 'a'));
	printf("8:在第4个元素位置上插入f元素\n");
	List_Insert(&L, 4, 'f');
	printf("	顺序表L为:");
	print_List_data(&L);
	printf("9:删除L的第3个元素\n");
	ListDelete(&L, 3, e);
	printf("	顺序表L为:");
	print_List_data(&L);
	printf("10:销毁顺序表L\n");
	DestroyList(&L);
	return 0;
}

三、运行结果

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

顺序表的基本操作 的相关文章

  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 为什么从字典中获取时会得到 Action<> 的克隆?

    我有以下字典 private Dictionary
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke

随机推荐

  • web服务器设置默认网站,web服务器中默认首页和默认网站的配置(以apache服务器为例)...

    默认首页的配置 php 第一种 直接修改apache服务器的配置文件 conf httpd conf中的DirectoryIndex 如 项目web以index php为首页 html DirectoryIndex index html i
  • Python追加文件内容

    Python追加文件内容 测试中需要造几百个账号 写了个脚本可以自动生成账号 但想把生成的账号写入一个文件 开始用的如下的write 方法 发下会先把原文件的内容清空再写入新的东西 文件里面每次都是最新生成的一个账号 mobile Meth
  • c++调用libcurl示例

    include
  • 【STM32】STM32存储映射

    存储映射 stm32f40xx的存储映射图 这幅图很重要 至于为什么 我还没编好 STM32存储空间有多大 芯片能访问的存储空间有多大 为什么 这个是由芯片内 CPU 的地址总线的数量决来定的 STM32 芯片内部的地址总线为32 根 1根
  • flutter开发实战-实现marquee根据文本长度显示文本跑马灯效果

    flutter开发实战 实现marquee文本跑马灯效果 最近开发过程中需要marquee文本跑马灯效果 这里使用到了flutter的插件marquee 效果图如下 一 marquee 1 1 引入marquee 在pubspec yaml
  • 第一课:VxWorks系统概述

    目录 1 1 VxWorks系统简介 1 2 VxWorks的特点 1 3VxWorks系统和Linux系统的区别 1 4 VxWorks开发环境获取 1 1 VxWorks系统简介 VxWorks 操作系统是美国WindRiver公司于1
  • matlab中如何对一个小数取整,学习笔记153—matlab中小数如何取整?

    matlab中小数取整的函数大约有四个 floor ceil round fix 1 round取整方法是四舍五入 round函数功能 四舍五入取整 使用方法 B round A 对数组A中每个元素朝最近的方向取整数部分 并返回与A同维的整
  • 在微信小程序中如何使用wx.onLocationChange(function callback)

    参考文档 点这里 其实我使用这个挨批之前用的是wx getLocation文档点这里 可是很无奈 产品的需求是要从首页点进去的时候获取一次用户坐标 可是如果用户频繁点击在真机上就会出现获取不到的情况 会报以下的错误 如下图所示 所以很尴尬
  • 【python基础】【pandas】读取数据pd.read_csv、列表切片iloc、转换成数组to_numpy

    读取数据保存到data中 路径根据你保存的train csv位置而有变化 big5 是专门针对台湾繁体的 data pd read csv D pycharm HungYiLiData hw1 train csv encoding utf
  • 递归的方法对字符串逆序

    对于字符串逆序 简单的说就是把字符串倒过来 比如说 abcdef 将它逆序后就变成 fedcba 这看起来是多么的简单易懂 但是一旦放到代码中 思维可就要加强十倍了 include
  • 分配学号python

    with open studentList csv mode r encoding utf 8 as stuData lsStu line strip split for line in stuData with open schoolCo
  • 【100%通过率 】【华为OD机试 c++/python】猜字谜【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 小王设计了一个简单的猜字谜游戏 游戏的谜面是一个错误的单词 比如nesw 玩家需要猜出谜底库中正确的单词 猜中的要求如下 对于某个谜面和谜底单词
  • 零日漏洞

    点击上方 订阅话题 第一时间了解漏洞威胁 0x01 漏洞描述 Windows Print Spooler是Windows的打印机后台处理程序 广泛的应用于各种内网中 360漏洞云监测到微软最新披露了一个新的Windows Print Spo
  • 解决C++调用python传递中文路径的问题

    背景 最近在做使用C 调用python代码来进行图像处理 需要传入一个图像文件的路径 使用 char picPath E pic jpg PyObject path Py BuildValue s picPath 来生成图像路径的pytho
  • PAT 1072 开学寄语(20)(代码+思路)

    1072 开学寄语 20 分 下图是上海某校的新学期开学寄语 天将降大任于斯人也 必先删其微博 卸其 QQ 封其电脑 夺其手机 收其 ipad 断其 wifi 使其百无聊赖 然后 净面 理发 整衣 然后思过 读书 锻炼 明智 开悟 精进 而
  • python监视mysql最大连接数

    usr local bin python3 5import pymysqlimport time sum 0 while True open db connection db pymysql connect localhost root a
  • You can‘t specify target table ‘XXXX‘ for update in FROM clause mysql错误解决方法

    mysql数据库同时对一个表进行查询和删改操作时 会报 You can t specify target table XXXX for update in FROM clause 错误 无法执行 错误提示的意思是 不能在 FROM 子句中指
  • 2022年度回顾

    2022年接近尾声 驻足回看行业这一年的跌宕起伏 无论是技术的突破 应用的创新 还是生态的兴衰 皆成为了行业发展的历史注脚 如往年一样 万向区块链于年末推出重磅年度回顾系列文章 公链技术篇 应用篇 和 监管篇 以期记录当前行业发展的缩影 下
  • Java快捷键(学到会慢慢更新)

    大家都知道快捷键的重要性 尤其在代码中 懂得运用快捷键的小伙伴写代码速度就是快 目前我学Java还不是很久 之前学c的 所以所知道的快捷键比较少 后续会一直更新这条博文 第一个快捷键 psvm 回车 这是main函数快速生成快捷键 具体还是
  • 顺序表的基本操作

    目录 一 实验要求 二 代码实现 三 运行结果 一 实验要求 1 验证性实验 实现顺序表的基本操作 实验内容 编写一个程序sqlist cpp 或 c 实现顺序表的各种基本运算和整体建表算法 假设顺序表的内容类型ElemType为char