PTA 顺序表的基本操作
原题有50分,这个答案有45分,欢迎指出不足 ;)
6-2 顺序表基本操作 (50 分)
实现顺序表的基本操作,如初始化、插入、删除、输出等。 注意:顺序表中可有重复元素值。 要求:写出三个基本操作函数ListInsert,ListDelete,ListDeleteElem。
顺序表结构与操作函数接口定义:
typedef char ElemType; typedef struct //定义顺序表结构 {ElemType data[MaxSize];int length; } SqList; void InitList(SqList *&L); //初始化线性表 void DestroyList(SqList *&L); //销毁线性表 void DispList(SqList *L); //顺序输出顺序表元素值。 bool ListInsert(SqList *&L,int i,ElemType e); //在第i位上插入一个元素e,插入成功时返回true,否则返回false. bool ListDelete(SqList *&L,int i,ElemType &e); //删除第i个结点, 返回删除的元素值e,且删除成功时返回true,否则返回false bool ListDeleteElem(SqList *&L,ElemType e); //删除所有元素值为e的结点,删除成功时返回true,否则返回false
裁判测试程序样例:
#include <stdio.h> #include <malloc.h> #define MaxSize 10000 typedef char ElemType; typedef struct {ElemType data[MaxSize];int length; } SqList; void InitList(SqList *&L); //初始化线性表,裁判程序实现,略去不表。 void DestroyList(SqList *&L); //销毁线性表,裁判程序实现,略去不表。 void DispList(SqList *L); //顺序输出顺序表元素值。每个结点元素值以空格符间隔,裁判程序实现,略去不表。 bool ListInsert(SqList *&L,int i,ElemType e); //在第i位上插入一个元素e,插入成功时返回true,插入不成功时返回false. 其中:i为顺序表的逻辑序号。 bool ListDelete(SqList *&L,int i,ElemType &e); //在第i个结点上删除一个元素, 返回删除的元素值e,且删除成功时返回true,删除不成功返回false。其中:i为顺序表的逻辑序号。 bool ListDeleteElem(SqList *&L,ElemType e); //删除元素值为e的结点,删除成功时返回true,删除 不成功返回false。int main() {SqList *L;ElemType e,ch;int i=1;InitList(L);while((ch=getchar())!='\n'){ListInsert(L,i,ch); //在L的第i个结点位置上插入chi++;}DispList(L);scanf("\n%d %c",&i,&ch);ListInsert(L,i,ch);DispList(L);scanf("\n%d",&i); if(ListDelete(L,i,e)) // 删除L的第i个结点{printf("delete %dth: %c\n",i,e);DispList(L); if(ListDeleteElem(L,e)) // 删除元素值为e的结点printf("delete \'%c\' \n",e);elseprintf("delete \'%c\' failed!\n",e);}elseprintf("delete %dth failed!\n");DispList(L);DestroyList(L); }void InitList(SqList *&L) //裁判程序实现,略去不表。 {... } void DestroyList(SqList *&L) //裁判程序实现,略去不表。 {... } void DispList(SqList *L) //裁判程序实现,略去不表。 { ... }//你的代码将被嵌在这里
输入样例:
abcdefghia 5 X 1 说明 : 第一行:输入一行字符构造字符顺序表;第二行:在第5个结点处插入字符X的元素;第三行:删除第1个结点元素,并在顺序表中继续删除所有与此结点元素值相等的结点。
输出样例:
a b c d e f g h i a a b c d X e f g h i a delete 1th: a b c d X e f g h i a delete 'a' b c d X e f g h i
bool ListInsert(SqList *&L,int i,ElemType e){
if(i <= 0 || i > L->length + 1 || L->length == MaxSize)
return false;
int j;
i--;
if(i == L->length){
L->data[i] = e;
L->length++;
}
else{
for(j = L->length;j > i;j--)
L->data[j] = L->data[j - 1];
L->data[i] = e;
L->length++;
e = L->data[i - 1];
}
return true;
}bool ListDelete(SqList *&L,int i,ElemType &e){
if(i < 1 || i > L->length)
return false;
i--;
e = L->data[i];
int k;
for(k = i;k < L->length;k++)
L->data[k] = L->data[k + 1];
L->length--;
return true;
}bool ListDeleteElem(SqList *&L,ElemType e){
int i,k,flag = 0;
for(i = 0;i <= L->length;i++)
if(L->data[i] == e){
flag = 1;
for(k = i;k <= L->length - 1;k++)
L->data[k] = L->data[k + 1];
L->length--;
}
if(flag == 0)
return false;
return true;
}
PTA 顺序表的基本操作相关推荐
- C++:顺序表的基本操作(待完善)
根据命令提示进行顺序表的基本操作(待完善) #include<iostream> #include<algorithm> using namespace std; #defin ...
- 【头歌】顺序表的基本操作
第1关:顺序表的插入操作 任务描述 本关任务:编写顺序表的初始化.插入.遍历三个基本操作函数. 相关知识 顺序表的存储结构 顺序表的存储结构可以借助于高级程序设计语言中的数组来表示,一维数组的下标与元 ...
- 编程实现顺序表的基本操作
void InitList(SqList &L)//建立空顺序表函数 voidListInsert(SqList &L, int i, ElemType e) //在顺序表中第i个位置 ...
- 顺序表的基本操作(详细、全面)
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素 ...
- 线性表之顺序表的基本操作
线性表的定义 线性表是具有相同数据类型的 n ( n > = 0 ) n(n>= 0) n(n>=0)个数据元素的有限序列,其中 n n n为表长,当 n = 0 n=0 n=0时线 ...
- 线性表-顺序表的基本操作
线性表的定义和特点 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列 线性表中元素的个数n(n≥0)称为线性表的长度 空表:n=0 对于非空的线性表或线性结构,特点为: 存在唯一的一个被称作& ...
- 简单认识顺序表的基本操作
文章目录 顺序表 1. 顺序表的概念 2. 顺序表的基本操作 2.1 顺序表的基本属性 2.2 增加元素操作 2.2.1 头插 2.2.2 尾插 2.2.3 按位置插入元素 2.3 删除元素操作 2. ...
- 顺序表的基本操作 SCAU8576、SCAU8577、SCAU8578
//此项目功能:完成顺序表的基本操作及OJ给出的三道题:8576.8577.8578 #include <stdio.h> #include <malloc.h> #defin ...
- Tsai笔记:C++学习随性笔记(2)—— 数据结构:顺序表的基本操作
Tsai笔记:C++学习随性笔记(2)-- 数据结构:顺序表的基本操作 Tsai三步.(第一步,功能说明.第二步,结果图显示.第三步,代码展示) 第一步,功能说明. 1.线性表的顺序存储 线性表的顺序 ...
最新文章
- python地图 两点距离_使用Python调用百度地图Api获取两地距离
- mysql提高缓存_合理配置MySQL缓存 提高缓存命中率
- 多继承中构造器和析构器的调用顺序
- java 字符串倍_java字符串拼接与性能分析详解
- 【工具】Unity中如何自动化对模型减面?
- POJ1654 Area(多边形面积)
- 非常优秀的swiper插件————幻灯片播放、图片轮播
- Hbuilder--让手爽,飞一般的编码(二)
- 在centos中如何用yum安装最新的yum源
- 腾讯会议共享屏幕时,设置演讲者模式仅自己可见
- java图片自动盖章,一种自动盖章装置的制作方法
- 基于MVC模式的企业公文处理信息系统的设计与实现
- Mac苹果电脑怎么快速切换应用?
- 教您在MathType输入三角形符号
- 按Backspace键删除时,会出现^H
- Java获得随机汉字
- 这年头居然还有用360卫士清理垃圾的?那玩意就是最大的...Python自动清理不香吗?
- Linux内核cgroup使用介绍
- spring-boog-测试打桩-Mockito
- Win7 vista 界面美化
热门文章
- c# ascii转换方法
- c语言 文件读取z整行操作,C语言文件操作函数之ferror feof clearerr
- Soul—分享电影瞬间,找到与你一起看电影的人
- HOW2J.CN - 学习笔记(类和对象)
- RabbitMQ(七)延迟队列
- oracle数据库卷管理,AIX系统逻辑卷管理
- 闪存颗粒-2D和3D闪存之间的区别和联系
- 【干货】一文详解计算机视觉的广泛应用:网络压缩、视觉问答、可视化、风格迁移等
- Java爬虫之利用Jsoup+HttpClient爬取类叔叔不约匿名聊天网站的图片,未果——后爬取某网站美女图片案例
- Android穿山甲SDK接入,已封装直接使用