编写一个C语言程序,已知线性表 LA存放数值 ,现需要删除指定下标为i的元素,并把删除元素后的LA输出 测试数据占两行,第一行为线性表LA的元素,元素间以空格隔开,元素数量不超过100个。第二行为需要删除的下标i 输出删除指定下标i后的顺序表
时间: 2024-09-13 22:02:23 浏览: 64
线性表中重复结点删除.txt
在C语言中,你可以使用结构体表示线性表,动态数组存储元素,并实现一个函数来删除指定下标的元素。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义线性表的节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 动态分配内存并插入节点
Node* insert(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
return newNode;
}
// 删除指定下标的节点
void deleteElement(Node** head, int i) {
if (*head == NULL || i <= 0)
return;
Node* temp = *head;
Node* prev = NULL;
if (i == 1) {
*head = temp->next;
free(temp);
return;
}
for (int j = 1; j < i && temp != NULL; j++) {
prev = temp;
temp = temp->next;
}
if (temp == NULL)
return;
prev->next = temp->next;
free(temp);
}
// 打印线性表
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
char input[101];
// 输入线性表的数据
fgets(input, sizeof(input), stdin);
int numElements = sscanf(input, "%d", &i); // 假设这里i是要删除的下标
for (int j = 0; j < numElements; j++) {
int value;
sscanf(&input[strlen(input)-1], "%d", &value); // 这里假设输入的是数字然后跳过剩余字符
head = insert(&head, value);
}
// 删除指定下标的元素
deleteElement(&head, i);
// 打印删除元素后的线性表
printf("删除第 %d 位元素后的线性表:\n", i);
printList(head);
return 0;
}
```
请注意,这个示例仅适用于给定下标`i`的情况下线性表的头结点不是目标元素的情况。如果`i`等于1,那么我们需要特殊处理头结点。
阅读全文