任务:设计一个单链表,实现单链表初始化、求数据元素个数操作、插入、删除、取数据元素、判非空操作
时间: 2023-12-09 12:06:57 浏览: 77
好的,以下是单链表的设计:
```c++
#include <iostream>
using namespace std;
// 定义单链表节点结构体
struct Node {
int data; // 数据域
Node* next; // 指针域,指向下一个节点
};
// 定义单链表类
class LinkedList {
public:
// 初始化单链表
LinkedList() {
head = new Node;
head->next = NULL;
}
// 求单链表的数据元素个数
int size() {
int count = 0;
Node* p = head->next;
while (p != NULL) {
count++;
p = p->next;
}
return count;
}
// 在指定位置插入数据元素
bool insert(int pos, int data) {
if (pos < 1 || pos > size() + 1) {
return false;
} else {
Node* p = head;
for (int i = 1; i < pos; i++) {
p = p->next;
}
Node* q = new Node;
q->data = data;
q->next = p->next;
p->next = q;
return true;
}
}
// 删除指定位置的数据元素
bool remove(int pos) {
if (pos < 1 || pos > size()) {
return false;
} else {
Node* p = head;
for (int i = 1; i < pos; i++) {
p = p->next;
}
Node* q = p->next;
p->next = q->next;
delete q;
return true;
}
}
// 取指定位置的数据元素
bool get(int pos, int& data) {
if (pos < 1 || pos > size()) {
return false;
} else {
Node* p = head->next;
for (int i = 1; i < pos; i++) {
p = p->next;
}
data = p->data;
return true;
}
}
// 判空操作
bool isEmpty() {
return head->next == NULL;
}
private:
Node* head; // 头指针,指向单链表的第一个节点
};
```
使用示例:
```c++
int main() {
LinkedList list;
cout << "是否为空:" << list.isEmpty() << endl;
list.insert(1, 1);
list.insert(2, 2);
list.insert(3, 3);
cout << "元素个数:" << list.size() << endl;
int data;
list.get(2, data);
cout << "第2个元素为:" << data << endl;
list.remove(2);
cout << "删除第2个元素后,元素个数:" << list.size() << endl;
return 0;
}
```
阅读全文