1. 线性表基本操作的实现 【问题描述】 当我们要在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。反之,欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。 【基本要求】 要求生成线性表时,可以从键盘上读取元素,用顺序存储结构和链式存储结构实现。 【程序实现】 //顺序存储类型定义 s1-1.jpg //插入函数 s1-2.jpg { s1-3.jpg //删除运算 s1-4.jpg //创建线性表 img28 s1-5.jpg //输出线性表 s1-6.jpg s1-7.jpg s1-8.jpg 请读者完成链式存储结构的操作实现。
时间: 2024-02-20 17:56:16 浏览: 68
链式存储结构的操作实现如下:
```c++
#include <iostream>
using namespace std;
// 链表节点的结构体定义
struct Node {
int data; // 数据域
Node *next; // 指针域
};
// 链表类的定义
class LinkedList {
private:
Node *head; // 头节点指针
public:
LinkedList() { // 构造函数
head = new Node;
head->next = NULL;
}
~LinkedList() { // 析构函数
Node *p = head;
while (p != NULL) {
Node *q = p->next;
delete p;
p = q;
}
}
void insert(int i, int x) { // 插入函数
Node *p = head;
for (int j = 0; j < i - 1; j++) {
p = p->next;
}
Node *q = new Node;
q->data = x;
q->next = p->next;
p->next = q;
}
void remove(int i) { // 删除函数
Node *p = head;
for (int j = 0; j < i - 1; j++) {
p = p->next;
}
Node *q = p->next;
p->next = q->next;
delete q;
}
void display() { // 输出函数
Node *p = head->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
};
int main() {
LinkedList L;
int n, x, i;
cout << "请输入元素个数:";
cin >> n;
for (int j = 0; j < n; j++) {
cout << "请输入第" << j + 1 << "个元素:";
cin >> x;
L.insert(j + 1, x);
}
cout << "初始链表为:";
L.display();
cout << "请输入要删除的元素位置:";
cin >> i;
L.remove(i);
cout << "删除后链表为:";
L.display();
cout << "请输入要插入的元素位置和值:";
cin >> i >> x;
L.insert(i, x);
cout << "插入后链表为:";
L.display();
return 0;
}
```
阅读全文