SCAU 576 顺序线性表的基本操作

2024-03-14 00:44

本文主要是介绍SCAU 576 顺序线性表的基本操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

576 顺序线性表的基本操作

时间限制:1000MS 代码长度限制:10KB
提交次数:9027 通过次数:2456

题型: 编程题 语言: G++;GCC

Description

编写算法,创建初始化容量为LIST_INIT_SIZE的顺序表T,并实现插入、删除、遍历操作。本题目给出部分代码,请补全内容。


#include<stdio.h>
#include<malloc.h>
#define OK 1 
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType inttypedef struct
{int *elem;int length;int listsize;
}SqList;int InitList_Sq(SqList &L)
{
// 算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE
// 请补全代码}int Load_Sq(SqList &L)
{
// 输出顺序表中的所有元素int i;if(_________________________) printf("The List is empty!");  // 请填空else{printf("The List is: ");for(_________________________) printf("%d ",_________________________);  // 请填空}printf("\n");return OK;
}int ListInsert_Sq(SqList &L,int i,int e)
{
// 算法2.4,在顺序线性表L中第i个位置之前插入新的元素e
// i的合法值为1≤i≤L.length +1
// 请补全代码}int ListDelete_Sq(SqList &L,int i, int &e)
{
// 算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值
// i的合法值为1≤i≤L.length
// 请补全代码}int main()
{SqList T;int a, i;ElemType e, x;if(_________________________)    // 判断顺序表是否创建成功{printf("A Sequence List Has Created.\n");}while(1){printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");scanf("%d",&a);switch(a){case 1: scanf("%d%d",&i,&x);if(_________________________) printf("Insert Error!\n"); // 执行插入函数,根据返回值判断i值是否合法else printf("The Element %d is Successfully Inserted!\n", x); break;case 2: scanf("%d",&i);if(_________________________) printf("Delete Error!\n"); // 执行删除函数,根据返回值判断i值是否合法else printf("The Element %d is Successfully Deleted!\n", e);break;case 3: Load_Sq(T);break;case 0: return 1;}}
}

输入格式

测试样例格式说明:
根据菜单操作:
1、输入1,表示要实现插入操作,紧跟着要输入插入的位置和元素,用空格分开
2、输入2,表示要实现删除操作,紧跟着要输入删除的位置
3、输入3,表示要输出顺序表的所有元素
4、输入0,表示程序结束

输入样例

1
1 2
1
1 3
2
1
3
0

输出样例

A Sequence List Has Created.
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:
The Element 2 is Successfully Inserted!
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:
The Element 3 is Successfully Inserted!
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:
The Element 3 is Successfully Deleted!
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:
The List is: 2
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose:

#include<stdio.h>
#include<malloc.h>
#define OK 1 
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
using namespace std;
typedef struct
{int* elem;int length;//数组长度int listsize;
}SqList;int InitList_Sq(SqList& L)
{// 算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE// 请补全代码// 分配内存空间给顺序表的元素数组,并将指针赋给 L.elemL.elem = (int*)malloc(sizeof(int) * LIST_INIT_SIZE);// 检查内存分配是否成功。如果 L.elem 为 NULL,意味着内存分配失败,返回 ERROR。if (!L.elem) return 0;// 将顺序表的长度初始化为 0,表示当前顺序表中没有元素。L.length = 0;// 将顺序表的容量初始化为 LIST_INIT_SIZE,表示当前顺序表的最大容量。L.listsize = LIST_INIT_SIZE;// 返回 OK,表示顺序表初始化成功。return 1;}int Load_Sq(SqList& L)
{// 输出顺序表中的所有元素int i;if (L.length==0) printf("The List is empty!");  // 请填空else{printf("The List is: ");for (i = 0; i < L.length; i++) printf("%d ",L.elem[i]);  // 请填空}printf("\n");return OK;
}int ListInsert_Sq(SqList& L, int i, int e)
{// 算法2.4,在顺序线性表L中第i个位置之前插入新的元素e// i的合法值为1≤i≤L.length +1// 请补全代码// 检查插入位置 i 是否合法,即确保插入位置在合理范围内(1 到当前顺序表长度+1之间)。if (i<1 || i>L.length + 1) return 0;int* t = NULL;// 如果当前顺序表的长度已经达到了最大容量,则需要扩展顺序表的容量。if (L.length + 1 >= L.listsize) {// 使用 realloc 函数重新分配内存,扩展顺序表的容量。t = (int*)realloc(L.elem, sizeof(int) * (L.listsize + LISTINCREMENT));// 检查内存重新分配是否成功。如果 t 不为 NULL,则说明内存重新分配成功,更新 L.elem 指针指向新的内存空间。if (t)L.elem = t;else return 0;// 更新顺序表的容量为新分配内存空间的大小。L.listsize += LISTINCREMENT;}int j;// 将元素插入到顺序表中,需要移动插入位置之后的所有元素向后移动一位。for (j = L.length; j >= i; j--)L.elem[j] = L.elem[j - 1];// 将新元素 e 插入到位置 i 处。L.elem[i - 1] = e;// 更新顺序表的长度。L.length++;return 1;}int ListDelete_Sq(SqList& L, int i, int& e)
{// 算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值// i的合法值为1≤i≤L.length// 请补全代码// 检查删除位置 i 是否合法,即确保删除位置在合理范围内(1 到当前顺序表长度之间)。if (i<1 || i>L.length)return 0;// 将要删除的元素值保存到变量 e 中。e = L.elem[i - 1];int j;// 从删除位置开始,将删除位置后面的元素向前移动一位,覆盖掉删除位置的元素。for (j = i - 1; j < L.length; j++)L.elem[j] = L.elem[j + 1];// 更新顺序表的长度,删除了一个元素,长度减一。L.length--;return 1;
}int main()
{SqList T;int a, i;ElemType e, x;if (InitList_Sq(T))    // 判断顺序表是否创建成功{printf("A Sequence List Has Created.\n");}while (1){printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");scanf("%d", &a);switch (a){case 1: scanf("%d%d", &i, &x);if (!ListInsert_Sq(T, i, x)) printf("Insert Error!\n"); // 执行插入函数,根据返回值判断i值是否合法else printf("The Element %d is Successfully Inserted!\n", x);break;case 2: scanf("%d", &i);if (!ListDelete_Sq(T, i, e)) printf("Delete Error!\n"); // 执行删除函数,根据返回值判断i值是否合法else printf("The Element %d is Successfully Deleted!\n", e);break;case 3: Load_Sq(T);break;case 0: return 1;}}
}

这篇关于SCAU 576 顺序线性表的基本操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806758

相关文章

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

数据结构:线性表的顺序存储

文章目录 🍊自我介绍🍊线性表的顺序存储介绍概述例子 🍊顺序表的存储类型设计设计思路类型设计 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾” 和“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入

[数据结构]队列之顺序队列的类模板实现

队列是一种限定存取位置的线性表,允许插入的一端叫做队尾(rear),允许删除的一端叫做队首(front)。 队列具有FIFO的性质 队列的存储表示也有两种方式:基于数组的,基于列表的。基于数组的叫做顺序队列,基于列表的叫做链式队列。 一下是基于动态数组的顺序队列的模板类的实现。 顺序队列的抽象基类如下所示:只提供了接口和显式的默认构造函数和析构函数,在派生类中调用。 #i

[数据结构]栈之顺序栈的类模板实现

栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小。 Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数。 #ifndef STACK#define STACK//栈的抽象基类template<class T>class Stack{public:Stack(){}~Stack(){}virtual void Push(const T& x)=0;virt

[数据结构]线性表之单链表的类模板实现

类的具体实现如下: /#include"LinearList.h"#include <iostream>#include <cstdlib>using namespace std;template<class T>struct LinkNode //链表节点类{T data;LinkNode<T>* link;LinkNode(LinkNode<T>* ptr=NULL):

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的 构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。 简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是 要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时, 如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。

七、Maven继承和聚合关系、及Maven的仓库及查找顺序

1.继承   2.聚合   3.Maven的仓库及查找顺序

MongoDB学习—(3)shell的基本操作

一,删除数据库中的集合文档 命令为 db.[documentName].drop() 二,删除数据库 命令为 db.dropDatabase() 执行该命令时,应该先进入想要删除的数据库中,如 三,shell中的help 我们可以运用shell中的help来查询相关的操作,查询数据库相关的就用db.help(),查询集合相关的就用db.[documentName].help

MongoDB学习—(2)shell的基本操作

一,创建一个数据库 使用use关键字,格式为 use [databasename] 当你这样创建一个数据库时,该数据库只是创建于内存中,只有你对数据库执行一些操作后,数据库才真正的创建,否则如果直接关掉mongodb,数据库在内存中会被删除掉。 二,查看所有数据库 命令为 show dbs Mysql中的命令为show databases,两者有所不同。 三,查看数据库中的现有的文