给出实现删除线性表head中数据域为a的结点的源代码程序,a为随机值,要求线性表分别用顺序表和单链表两种存储结构实现,用visual c++ 2010学习版编译器可以直接运行
时间: 2024-10-06 18:01:30 浏览: 45
数据结构实验线性表(用java创建顺序表与链表并解决实验题目)
5星 · 资源好评率100%
以下是使用 Visual C++ 2010 学习版编译器,分别针对顺序表(数组)和单链表实现删除数据域为 `a` 的结点的简单示例代码:
### 顺序表(Array-Based List):
```cpp
#include <iostream>
using namespace std;
// 定义顺序表节点
struct Node {
int data;
};
// 删除数据域为 a 的元素
void deleteNode(int* arr, int size, int a) {
for (int i = 0; i < size - 1; ++i) { // 遍历列表直到找到第一个不等于a的位置
if (arr[i] != a) {
// 将后面的元素前移一位
for (int j = i; j < size - 1; ++j)
arr[j] = arr[j + 1];
// 缩小数组大小并结束循环
size--;
break;
}
}
// 如果整个列表都是 a,则直接返回
if (size == 0 || arr[size - 1] == a) {
cout << "Element not found or list is empty." << endl;
return;
}
// 更新指针,新数组的最后一个元素不是 a
arr[size - 1] = '\0'; // 用于标识数组结束,这里假设元素为整数
}
int main() {
int size, a;
cout << "Enter the size of the array: ";
cin >> size;
Node sequence[size]; // 创建顺序表
// 其他操作,如填充数据...
cout << "Enter value to be deleted: ";
cin >> a;
deleteNode(&sequence[0], size, a);
// 打印更新后的顺序表(注意数组结尾的'\0')
for (int i = 0; i < size; ++i)
cout << sequence[i].data << " ";
return 0;
}
```
### 单链表(Linked List):
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
struct Node {
int data;
Node* next;
};
// 删除数据域为 a 的节点
void deleteNode(Node** head, int a) {
if (*head == nullptr) {
cout << "List is empty." << endl;
return;
}
Node* current = *head;
Node* previous = nullptr;
while (current != nullptr && current->data != a) {
previous = current;
current = current->next;
}
// 如果找到目标节点
if (current != nullptr) {
// 不是头节点,连接前一个节点到下一个节点
if (previous != nullptr)
previous->next = current->next;
// 头节点,修改头节点指向下一个节点
else
*head = current->next;
// 释放目标节点内存
delete current;
} else {
cout << "Element not found." << endl;
}
}
int main() {
Node* head = nullptr;
// 创建链表并插入元素...
int a;
cout << "Enter value to be deleted: ";
cin >> a;
deleteNode(&head, a);
// 打印链表(需遍历)
Node* temp = head;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
return 0;
}
```
阅读全文