实验一 线性表 一:用C语言编程实现建立顺序表,并完成以下操作: 1) 初始化线性表。(从键盘接受元素个数n以及n个整型数) 2)通过键盘读取元素实现顺序表插入操作。 3)通过键盘读取元素实现顺序表删除操作。 4)通过键盘读取元素实现顺序表修改操作。 二:用C语言编程建立实现链表,并完成以下操作: 1)初始化链表。(从键盘接受元素个数n以及n个整型数) 2)通过键盘读取元素实现链表插入操作。 .3)通过键盘读取元素实现链表删除操作。 4)通过键盘读取元素实现链表修改操作。
时间: 2023-12-10 10:41:51 浏览: 94
实验一 线性表基本操作的编程实现
5星 · 资源好评率100%
顺序表的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
void initSeqList(SeqList *L) {
printf("请输入线性表的长度:");
scanf("%d", &(L->length));
printf("请输入线性表的元素:");
for (int i = 0; i < L->length; i++) {
scanf("%d", &(L->data[i]));
}
}
void insertSeqList(SeqList *L) {
int pos, val;
printf("请输入要插入元素的位置:");
scanf("%d", &pos);
printf("请输入要插入的元素:");
scanf("%d", &val);
if (pos < 1 || pos > L->length + 1) {
printf("插入位置不合法!\n");
return;
}
if (L->length >= MAX_SIZE) {
printf("线性表已满,无法插入!\n");
return;
}
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i - 1];
}
L->data[pos - 1] = val;
L->length++;
}
void deleteSeqList(SeqList *L) {
int pos;
printf("请输入要删除元素的位置:");
scanf("%d", &pos);
if (pos < 1 || pos > L->length) {
printf("删除位置不合法!\n");
return;
}
for (int i = pos - 1; i < L->length - 1; i++) {
L->data[i] = L->data[i + 1];
}
L->length--;
}
void modifySeqList(SeqList *L) {
int pos, val;
printf("请输入要修改元素的位置:");
scanf("%d", &pos);
printf("请输入要修改的元素:");
scanf("%d", &val);
if (pos < 1 || pos > L->length) {
printf("修改位置不合法!\n");
return;
}
L->data[pos - 1] = val;
}
void printSeqList(SeqList L) {
printf("线性表的元素为:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SeqList L;
initSeqList(&L);
int choice;
while (1) {
printf("请选择操作:\n");
printf("1、插入元素\n");
printf("2、删除元素\n");
printf("3、修改元素\n");
printf("4、打印线性表\n");
printf("5、退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
insertSeqList(&L);
break;
case 2:
deleteSeqList(&L);
break;
case 3:
modifySeqList(&L);
break;
case 4:
printSeqList(L);
break;
case 5:
exit(0);
default:
printf("输入有误,请重新选择操作!\n");
}
}
return 0;
}
```
链表的实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} ListNode, *ListPtr;
void initLinkedList(ListPtr *L) {
printf("请输入链表的长度:");
int n;
scanf("%d", &n);
printf("请输入链表的元素:");
*L = (ListPtr) malloc(sizeof(ListNode));
ListPtr p = (*L);
for (int i = 0; i < n; i++) {
ListPtr q = (ListPtr) malloc(sizeof(ListNode));
scanf("%d", &(q->data));
p->next = q;
p = q;
}
p->next = NULL;
}
void insertLinkedList(ListPtr L) {
int pos, val;
printf("请输入要插入元素的位置:");
scanf("%d", &pos);
printf("请输入要插入的元素:");
scanf("%d", &val);
ListPtr p = L, q = NULL;
int i = 0;
while (p && i < pos - 1) {
p = p->next;
i++;
}
if (!p || i > pos - 1) {
printf("插入位置不合法!\n");
return;
}
q = (ListPtr) malloc(sizeof(ListNode));
q->data = val;
q->next = p->next;
p->next = q;
}
void deleteLinkedList(ListPtr L) {
int pos;
printf("请输入要删除元素的位置:");
scanf("%d", &pos);
ListPtr p = L, q = NULL;
int i = 0;
while (p->next && i < pos - 1) {
p = p->next;
i++;
}
if (!p->next || i > pos - 1) {
printf("删除位置不合法!\n");
return;
}
q = p->next;
p->next = q->next;
free(q);
}
void modifyLinkedList(ListPtr L) {
int pos, val;
printf("请输入要修改元素的位置:");
scanf("%d", &pos);
printf("请输入要修改的元素:");
scanf("%d", &val);
ListPtr p = L->next;
int i = 1;
while (p && i < pos) {
p = p->next;
i++;
}
if (!p || i > pos) {
printf("修改位置不合法!\n");
return;
}
p->data = val;
}
void printLinkedList(ListPtr L) {
ListPtr p = L->next;
printf("链表的元素为:");
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
ListPtr L;
initLinkedList(&L);
int choice;
while (1) {
printf("请选择操作:\n");
printf("1、插入元素\n");
printf("2、删除元素\n");
printf("3、修改元素\n");
printf("4、打印链表\n");
printf("5、退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
insertLinkedList(L);
break;
case 2:
deleteLinkedList(L);
break;
case 3:
modifyLinkedList(L);
break;
case 4:
printLinkedList(L);
break;
case 5:
exit(0);
default:
printf("输入有误,请重新选择操作!\n");
}
}
return 0;
}
```
阅读全文