通过键盘读取元素建立一个线性表;指定一个元素,在此元素之前插入一个新元素;指定一个元素,删除此元素。用c语言实现以上代码
时间: 2024-10-11 16:08:40 浏览: 66
有一个线性表(a1,a2,...,an),它存储在有附加表头结点的单链表中,写一个算法,求出该线性表中值为x的元素的序号。如果x
5星 · 资源好评率100%
在C语言中,我们可以使用标准库函数如`scanf`从键盘读取元素,并使用指针操作实现线性表(这里假设我们使用的是单链表结构)。以下是基本的步骤:
1. **读取元素并建立线性表**:
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
void insertBeforeElement(Node** head, int target, int newElement) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = newElement; // 设置新元素值
if (*head == NULL || (*head)->data == target) { // 如果链表为空或目标元素位于第一个位置
newNode->next = *head; // 将新节点设为头节点
*head = newNode; // 更新头节点
} else {
Node* current = *head; // 遍历查找目标元素
while (current->next != NULL && current->data != target)
current = current->next;
if (current->next != NULL) { // 找到了目标元素
newNode->next = current->next; // 插入新元素在其后
current->next = newNode; // 更新当前节点指向新节点
}
}
}
void deleteElement(Node** head, int element) {
if (*head != NULL && (*head)->data == element) { // 如果头节点就是要删除的元素
Node* temp = *head;
*head = (*head)->next;
free(temp); // 释放已删除节点的空间
} else {
Node* current = *head;
Node* previous = NULL;
while (current != NULL && current->data != element) {
previous = current;
current = current->next;
}
if (current != NULL) { // 找到要删除的元素
previous->next = current->next;
free(current);
}
}
}
int main() {
Node* head = NULL;
int element, newElement;
printf("请输入元素(按Enter结束):");
while (scanf("%d", &element) == 1) { // 循环读取直到遇到空行
insertBeforeElement(&head, element, element + 1); // 在读取的元素前插入新元素
}
// 省略了显示链表内容和删除元素的操作...
return 0;
}
```
阅读全文