实验一 线性表 一:用C语言编程实现建立顺序表,并完成以下操作: 1) 初始化线性表。(从键盘接受元素个数n以及n个整型数) 2)通过键盘读取元素实现顺序表插入操作。 3)通过键盘读取元素实现顺序表删除操作。 4)通过键盘读取元素实现顺序表修改操作。 二:用C语言编程建立实现链表,并完成以下操作: 1)初始化链表。(从键盘接受元素个数n以及n个整型数) 2)通过键盘读取元素实现链表插入操作。 .3)通过键盘读取元素实现链表删除操作。 4)通过键盘读取元素实现链表修改操作。
时间: 2024-03-03 15:52:51 浏览: 37
好的,我理解了你的问题。以下是我的回答:
顺序表的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
//定义顺序表结构体
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
//初始化顺序表
void init(SeqList *list) {
int n;
printf("请输入元素个数n:");
scanf("%d", &n);
printf("请输入%d个整数:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &list->data[i]);
}
list->length = n;
printf("初始化完成。\n");
}
//插入元素到顺序表中
void insert(SeqList *list) {
int pos, val;
printf("请输入要插入的位置和值(用空格隔开):");
scanf("%d %d", &pos, &val);
if (pos < 1 || pos > list->length + 1) {
printf("插入位置错误!\n");
return;
}
if (list->length >= MAX_SIZE) {
printf("顺序表已满,无法插入!\n");
return;
}
for (int i = list->length; i >= pos; i--) {
list->data[i] = list->data[i - 1];
}
list->data[pos - 1] = val;
list->length++;
printf("插入成功。\n");
}
//删除顺序表中的元素
void delete(SeqList *list) {
int pos;
printf("请输入要删除的位置:");
scanf("%d", &pos);
if (pos < 1 || pos > list->length) {
printf("删除位置错误!\n");
return;
}
for (int i = pos - 1; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->length--;
printf("删除成功。\n");
}
//修改顺序表中的元素
void modify(SeqList *list) {
int pos, val;
printf("请输入要修改的位置和新值(用空格隔开):");
scanf("%d %d", &pos, &val);
if (pos < 1 || pos > list->length) {
printf("修改位置错误!\n");
return;
}
list->data[pos - 1] = val;
printf("修改成功。\n");
}
int main() {
SeqList list;
int choice;
while (1) {
printf("请选择要进行的操作:\n");
printf("1. 初始化顺序表\n");
printf("2. 插入元素\n");
printf("3. 删除元素\n");
printf("4. 修改元素\n");
printf("5. 退出\n");
printf("请输入你的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
init(&list);
break;
case 2:
insert(&list);
break;
case 3:
delete(&list);
break;
case 4:
modify(&list);
break;
case 5:
exit(0);
default:
printf("输入错误,请重新选择!\n");
break;
}
}
return 0;
}
```
链表的实现:
```c
#include <stdio.h>
#include <stdlib.h>
//定义链表节点结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
//定义链表结构体
typedef struct {
Node *head;
int length;
} LinkedList;
//初始化链表
void init(LinkedList *list) {
int n;
printf("请输入元素个数n:");
scanf("%d", &n);
printf("请输入%d个整数:", n);
list->head = NULL;
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
Node *node = (Node*)malloc(sizeof(Node));
node->data = val;
node->next = NULL;
if (list->head == NULL) {
list->head = node;
} else {
Node *p = list->head;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
}
list->length = n;
printf("初始化完成。\n");
}
//在链表中插入元素
void insert(LinkedList *list) {
int pos, val;
printf("请输入要插入的位置和值(用空格隔开):");
scanf("%d %d", &pos, &val);
if (pos < 1 || pos > list->length + 1) {
printf("插入位置错误!\n");
return;
}
Node *node = (Node*)malloc(sizeof(Node));
node->data = val;
node->next = NULL;
if (pos == 1) {
node->next = list->head;
list->head = node;
} else {
Node *p = list->head;
for (int i = 1; i < pos - 1; i++) {
p = p->next;
}
node->next = p->next;
p->next = node;
}
list->length++;
printf("插入成功。\n");
}
//在链表中删除元素
void delete(LinkedList *list) {
int pos;
printf("请输入要删除的位置:");
scanf("%d", &pos);
if (pos < 1 || pos > list->length) {
printf("删除位置错误!\n");
return;
}
Node *p = list->head;
if (pos == 1) {
list->head = p->next;
free(p);
} else {
for (int i = 1; i < pos - 1; i++) {
p = p->next;
}
Node *q = p->next;
p->next = q->next;
free(q);
}
list->length--;
printf("删除成功。\n");
}
//在链表中修改元素
void modify(LinkedList *list) {
int pos, val;
printf("请输入要修改的位置和新值(用空格隔开):");
scanf("%d %d", &pos, &val);
if (pos < 1 || pos > list->length) {
printf("修改位置错误!\n");
return;
}
Node *p = list->head;
for (int i = 1; i < pos; i++) {
p = p->next;
}
p->data = val;
printf("修改成功。\n");
}
int main() {
LinkedList list;
int choice;
while (1) {
printf("请选择要进行的操作:\n");
printf("1. 初始化链表\n");
printf("2. 插入元素\n");
printf("3. 删除元素\n");
printf("4. 修改元素\n");
printf("5. 退出\n");
printf("请输入你的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
init(&list);
break;
case 2:
insert(&list);
break;
case 3:
delete(&list);
break;
case 4:
modify(&list);
break;
case 5:
exit(0);
default:
printf("输入错误,请重新选择!\n");
break;
}
}
return 0;
}
```
希望我的回答能够帮助到你!