本文主要是介绍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 顺序线性表的基本操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!