c语言建立n个元素的顺序表SqList,n个元素由键盘输入,实现顺序表的基本操作,并在main函数中测试。 在SqList的元素i之后插入一个元素,实现顺序表插入的基本操作。 在sqList中删除指定位置i上的元素,实现顺序表删除的操作
时间: 2024-09-30 14:16:06 浏览: 86
在C语言中,我们可以创建一个名为`SqList`的结构体,用于存储顺序表,并提供插入和删除元素的基本操作。首先,我们需要定义一个结构体`node`作为链表节点,以及一个指向`node`类型的指针变量`head`作为链表的头结点。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct node {
int data;
struct node* next;
} Node;
// 创建顺序表结构体
typedef struct SqList {
Node* head;
int size; // 记录元素数量
} SqList;
// 插入元素到顺序表指定位置
void insertAt(SqList* list, int index, int value) {
if (index <= 0 || index > list->size + 1) {
printf("错误:插入位置超出范围\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (index == 1) { // 如果要插入在头部
newNode->next = list->head;
list->head = newNode;
} else {
Node* current = list->head;
for (int i = 1; i < index - 1 && current != NULL; i++) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
list->size++;
}
// 删除顺序表指定位置的元素
void deleteAt(SqList* list, int index) {
if (index <= 0 || index > list->size) {
printf("错误:删除位置超出范围\n");
return;
}
if (index == 1) {
list->head = list->head->next;
} else {
Node* current = list->head;
for (int i = 1; i < index && current != NULL; i++) {
current = current->next;
}
current->next = current->next->next;
}
list->size--;
}
// 主函数测试
int main() {
SqList list;
list.head = NULL;
list.size = 0;
int n, position, value;
printf("请输入顺序表元素数量(n): ");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("请输入元素%d的位置和值: ", i);
scanf("%d %d", &position, &value);
// 插入元素
insertAt(&list, position, value);
// 打印当前顺序表内容
printSqList(list.head);
}
// 提示用户选择要删除的元素
printf("请输入要删除的元素位置: ");
scanf("%d", &position);
deleteAt(&list, position);
printSqList(list.head);
return 0;
}
// 打印顺序表
void printSqList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
```
在这个程序中,我们实现了`insertAt`和`deleteAt`函数,分别负责在指定位置插入和删除元素。在`main`函数中,我们先输入顺序表的元素数量和每个元素的位置和值,然后执行插入操作并打印列表,最后询问用户删除某个位置的元素并再次打印列表。请注意,这个实现假设了元素插入和删除后列表不会自动调整大小。如果需要动态扩容,还需要添加相应的功能。
阅读全文