写实验报告:关于根据线性表的抽象数据类型的定义,选择下面任意一种链式结构实现线性表,并完成线性 表的基本功能。 线性表存储结构(五选一): ①带头结点的单链表; ②不带头结点的单链表; ③循环链表; ④双链表; ⑤静态链表。 线性表的基本功能: ①构造(使用头插法、尾插法两种方法); ②插人(要求建立的链表按照关键字从小到大有序); ③删除; ④查找; ⑤获取链表长度; ⑥销毁; ⑦其他(可自行定义)。编写main函数测试线性表的正确性
时间: 2023-05-19 11:05:25 浏览: 126
以下是一个使用带头结点的单链表实现线性表的示例代码:
```c++
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 定义线性表类
class List {
private:
ListNode* head; // 头节点指针
public:
// 构造函数
List() {
head = new ListNode(0); // 创建头节点
}
// 析构函数
~List() {
ListNode* p = head;
while (p) {
ListNode* q = p->next;
delete p;
p = q;
}
}
// 头插法构造链表
void createHeadList(int n) {
for (int i = 0; i < n; i++) {
int x;
cin >> x;
ListNode* p = new ListNode(x);
p->next = head->next;
head->next = p;
}
}
// 尾插法构造链表
void createTailList(int n) {
ListNode* tail = head;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
ListNode* p = new ListNode(x);
tail->next = p;
tail = p;
}
}
// 按关键字从小到大插入节点
void insert(int x) {
ListNode* p = head;
while (p->next && p->next->val < x) {
p = p->next;
}
ListNode* q = new ListNode(x);
q->next = p->next;
p->next = q;
}
// 删除节点
void remove(int x) {
ListNode* p = head;
while (p->next && p->next->val != x) {
p = p->next;
}
if (p->next) {
ListNode* q = p->next;
p->next = q->next;
delete q;
}
}
// 查找节点
ListNode* find(int x) {
ListNode* p = head->next;
while (p && p->val != x) {
p = p->next;
}
return p;
}
// 获取链表长度
int length() {
int len = 0;
ListNode* p = head->next;
while (p) {
len++;
p = p->next;
}
return len;
}
// 销毁链表
void destroy() {
ListNode* p = head;
while (p) {
ListNode* q = p->next;
delete p;
p = q;
}
head = NULL;
}
// 输出链表
void print() {
ListNode* p = head->next;
while (p) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
};
int main() {
List list;
int n;
cin >> n;
list.createHeadList(n); // 使用头插法构造链表
list.print(); // 输出链表
list.insert(5); // 插入节点
list.print(); // 输出链表
list.remove(3); // 删除节点
list.print(); // 输出链表
ListNode* p = list.find(4); // 查找节点
if (p) {
cout << "Found: " << p->val << endl;
} else {
cout << "Not found" << endl;
}
cout << "Length: " << list.length() << endl; // 获取链表长度
list.destroy(); // 销毁链表
return 0;
}
```
注意:以上代码仅为示例,实际实验报告中应该根据具体要求进行修改和完善。
阅读全文