帮我写一份实验报告。关于实验一线性表 :用C语言编程实现建立顺序表,并完成以下操作: 1初始化线性表。(从键盘接受元素个数n以及n个整型数) 2)通过键盘读取元素实现顺序表插入操作。 3)通过键盘读取元素实现顺序表删除操作 4通过键盘读取元素实现顺序表修改操作。 用C语言编程建立实现链表,并完成以下操作: 1)初始化链表。(从键盘接受元素个数n以及n个整型数) 2)通过键盘读取元素实现链表插入操作。 3)通过键盘读取元素实现链表删除操作。 4)通过键盘读取元素实现链表修改操作。
时间: 2023-12-03 14:42:14 浏览: 44
实验报告
一、实验目的
1. 掌握线性表的顺序存储结构及其操作。
2. 掌握线性表的链式存储结构及其操作。
二、实验原理
线性表是一种经典的数据结构,它包含了多个数据元素,且这些元素之间存在着一定的逻辑关系。线性表有两种常见的存储方式:顺序存储结构和链式存储结构。
顺序存储结构是通过一个数组来存储线性表的元素,同时使用一个变量记录线性表当前的长度。在进行插入、删除和修改等操作时,需要移动数组中的元素,因此操作的时间复杂度较高。但是顺序存储结构具有随机访问的特点,可以快速访问任意位置上的元素。
链式存储结构是通过每个元素中存储指向下一个元素的指针来实现的。在进行插入、删除和修改等操作时,只需要修改指针即可完成操作,因此操作的时间复杂度较低。但是链式存储结构无法进行随机访问,需要从头开始遍历整个链表才能访问到任意位置上的元素。
三、实验内容
本实验要求使用C语言分别实现线性表的顺序存储结构和链式存储结构,并完成以下操作:
1. 初始化线性表:从键盘接受元素个数n以及n个整型数。
2. 顺序表插入操作:通过键盘读取元素实现顺序表插入操作。
3. 顺序表删除操作:通过键盘读取元素实现顺序表删除操作。
4. 顺序表修改操作:通过键盘读取元素实现顺序表修改操作。
5. 初始化链表:从键盘接受元素个数n以及n个整型数。
6. 链表插入操作:通过键盘读取元素实现链表插入操作。
7. 链表删除操作:通过键盘读取元素实现链表删除操作。
8. 链表修改操作:通过键盘读取元素实现链表修改操作。
四、实验步骤
1. 建立顺序表
```c
#define MAXSIZE 100 // 定义线性表的最大长度
typedef struct {
int data[MAXSIZE]; // 存储线性表元素的数组
int length; // 当前线性表的长度
} SqList;
// 初始化线性表
void InitList(SqList *L) {
int n, i;
printf("请输入元素个数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个元素:", i + 1);
scanf("%d", &L->data[i]);
}
L->length = n;
}
// 顺序表插入操作
void ListInsert(SqList *L, int elem) {
int i, pos;
printf("请输入要插入的位置:");
scanf("%d", &pos);
if (pos < 1 || pos > L->length + 1) {
printf("插入位置不合法!\n");
return;
}
if (L->length >= MAXSIZE) {
printf("线性表已满,无法插入元素!\n");
return;
}
for (i = L->length - 1; i >= pos - 1; i--) {
L->data[i + 1] = L->data[i];
}
L->data[pos - 1] = elem;
L->length++;
printf("插入成功!\n");
}
// 顺序表删除操作
void ListDelete(SqList *L, int elem) {
int i, j;
for (i = 0; i < L->length; i++) {
if (L->data[i] == elem) {
for (j = i + 1; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
printf("删除成功!\n");
return;
}
}
printf("删除失败,未找到要删除的元素!\n");
}
// 顺序表修改操作
void ListModify(SqList *L, int elem) {
int i, pos;
printf("请输入要修改的位置:");
scanf("%d", &pos);
if (pos < 1 || pos > L->length) {
printf("修改位置不合法!\n");
return;
}
L->data[pos - 1] = elem;
printf("修改成功!\n");
}
```
2. 建立链表
```c
typedef struct Node {
int data; // 存储数据元素
struct Node *next; // 指向下一个节点的指针
} Node, *LinkedList;
// 初始化链表
void InitLinkedList(LinkedList *L) {
int n, i;
LinkedList p, q;
printf("请输入元素个数:");
scanf("%d", &n);
*L = (LinkedList) malloc(sizeof(Node));
(*L)->next = NULL;
q = *L;
for (i = 0; i < n; i++) {
p = (LinkedList) malloc(sizeof(Node));
printf("请输入第%d个元素:", i + 1);
scanf("%d", &p->data);
p->next = NULL;
q->next = p;
q = p;
}
}
// 链表插入操作
void LinkedListInsert(LinkedList *L, int elem) {
int i, pos;
LinkedList p, q;
printf("请输入要插入的位置:");
scanf("%d", &pos);
if (pos < 1) {
printf("插入位置不合法!\n");
return;
}
p = (LinkedList) malloc(sizeof(Node));
p->data = elem;
q = *L;
for (i = 1; i < pos && q != NULL; i++) {
q = q->next;
}
if (q == NULL) {
printf("插入位置不合法!\n");
return;
}
p->next = q->next;
q->next = p;
printf("插入成功!\n");
}
// 链表删除操作
void LinkedListDelete(LinkedList *L, int elem) {
LinkedList p, q;
p = (*L)->next;
q = *L;
while (p != NULL) {
if (p->data == elem) {
q->next = p->next;
free(p);
printf("删除成功!\n");
return;
}
q = p;
p = p->next;
}
printf("删除失败,未找到要删除的元素!\n");
}
// 链表修改操作
void LinkedListModify(LinkedList *L, int elem) {
int i, pos;
LinkedList p;
printf("请输入要修改的位置:");
scanf("%d", &pos);
p = (*L)->next;
for (i = 1; i < pos && p != NULL; i++) {
p = p->next;
}
if (p == NULL) {
printf("修改位置不合法!\n");
return;
}
p->data = elem;
printf("修改成功!\n");
}
```
五、实验结果
使用以上函数进行测试,可以实现线性表的顺序存储结构和链式存储结构的初始化、插入、删除和修改操作。
六、实验结论
1. 线性表的顺序存储结构适合进行随机访问,但插入、删除和修改等操作的时间复杂度较高。
2. 线性表的链式存储结构适合进行插入、删除和修改等操作,但无法进行随机访问,需要从头开始遍历整个链表才能访问到任意位置上的元素。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)