给我一个包含初始化、建立、求表长、输出、插入、查找、删除功能的线性表程序
时间: 2023-09-29 22:03:12 浏览: 99
实现线性表的插入、删除、查找以及线性表合并等基本操作以及线性表合并等基本操作的程序
5星 · 资源好评率100%
以下是一个基于链表的线性表程序,包含了初始化、建立、求表长、输出、插入、查找、删除等功能:
```c++
#include <iostream>
using namespace std;
// 定义节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x), next(NULL) {}
};
// 定义链表类
class LinkedList {
private:
ListNode* head;
public:
// 构造函数,初始化为空链表
LinkedList() {
head = NULL;
}
// 建立链表,输入n个元素
void createList(int n) {
ListNode* curr = NULL;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
ListNode* node = new ListNode(x);
if (i == 0) {
head = node;
} else {
curr->next = node;
}
curr = node;
}
}
// 求链表长度
int length() {
int len = 0;
ListNode* curr = head;
while (curr != NULL) {
len++;
curr = curr->next;
}
return len;
}
// 输出链表
void printList() {
ListNode* curr = head;
while (curr != NULL) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
// 在第pos个位置插入元素x
void insert(int pos, int x) {
if (pos < 1 || pos > length() + 1) {
cout << "Invalid position" << endl;
return;
}
ListNode* node = new ListNode(x);
if (pos == 1) {
node->next = head;
head = node;
} else {
ListNode* prev = head;
for (int i = 1; i < pos - 1; i++) {
prev = prev->next;
}
node->next = prev->next;
prev->next = node;
}
}
// 查找值为x的元素在链表中的位置
int search(int x) {
int pos = 1;
ListNode* curr = head;
while (curr != NULL && curr->val != x) {
pos++;
curr = curr->next;
}
if (curr == NULL) {
return -1;
} else {
return pos;
}
}
// 删除第pos个位置的元素
void remove(int pos) {
if (pos < 1 || pos > length()) {
cout << "Invalid position" << endl;
return;
}
if (pos == 1) {
ListNode* node = head;
head = head->next;
delete node;
} else {
ListNode* prev = head;
for (int i = 1; i < pos - 1; i++) {
prev = prev->next;
}
ListNode* node = prev->next;
prev->next = node->next;
delete node;
}
}
};
int main() {
LinkedList list;
int n;
cin >> n;
list.createList(n);
list.printList();
cout << "Length: " << list.length() << endl;
list.insert(1, 100);
list.printList();
cout << "Position of 100: " << list.search(100) << endl;
list.remove(3);
list.printList();
return 0;
}
```
这个程序使用链表实现了一个线性表,并提供了初始化、建立、求表长、输出、插入、查找、删除等功能。用户可以通过输入命令来调用这些功能,对线性表进行操作。
阅读全文