用简单的c语言程序编写以下线性表的建立、输出及删除所有等于X的数据元素。 实验内容: 编写程序建立一个顺序表,逐个输出顺序表中所有数据元素的值,并删除顺序表中所有等于X的数据元素
时间: 2024-09-07 22:00:57 浏览: 56
在C语言中,我们可以使用数组来模拟顺序表(Linear List),并实现建立、输出和删除操作。下面是一个简单的示例程序:
```c
#include <stdio.h>
#define MAX_SIZE 10 // 定义最大元素数
// 结构体表示顺序表中的一个节点
typedef struct {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 将新节点添加到列表末尾
void appendToList(Node** head, int value) {
if (*head == NULL) {
*head = createNode(value);
} else {
Node* curr = *head;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = createNode(value);
}
}
// 输出整个列表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 删除列表中所有等于 X 的元素
void deleteElements(Node** head, int x) {
Node* curr = *head;
Node* prev = NULL;
while (curr != NULL && curr->data == x) {
if (prev == NULL) { // 如果头节点就是X,则替换为下一个节点
*head = curr->next;
} else {
prev->next = curr->next;
}
free(curr); // 释放当前节点内存
curr = *head; // 更新指针
}
}
int main() {
Node* head = NULL;
int n, value, x;
printf("Enter the number of elements and their values (or -1 to stop): ");
scanf("%d", &n);
while (n != -1) {
scanf("%d", &value);
appendToList(&head, value);
scanf("%d", &x); // 输入待删除的元素
deleteElements(&head, x);
scanf("%d", &n);
}
printf("After deletion:\n");
printList(head);
return 0;
}
```
在这个程序中,我们首先创建了一个顺序表结构,然后实现了添加元素、打印列表以及删除等于特定值的元素的操作。用户会交互输入元素和删除值,程序会实时更新列表内容。
阅读全文