c++采用数组来实现链表初始元素的输入、任意位置插入、删除、查找、遍历的功能。自己输入初始元素,通过不同指令输出不同功能
时间: 2023-12-13 08:05:47 浏览: 66
好的,我可以给你一个简单的示例代码,来实现这些功能。如下所示:
```c++
#include<iostream>
using namespace std;
//定义链表节点的结构体
struct Node{
int data;
Node* next;
};
//链表类
class List{
public:
List(){
head = new Node; //创建头节点
head->next = NULL; //将头节点的next指针初始化为NULL
}
~List(){delete head;} //析构函数
void insert(int pos, int val); //插入节点
void remove(int val); //删除节点
int find(int val); //查找节点
void traverse(); //遍历链表
private:
Node* head; //头节点指针
};
//插入节点函数
void List::insert(int pos, int val){
Node* prev = head; //定义一个指向前一个节点的指针
for(int i=0; i<pos && prev->next!=NULL; i++){
prev = prev->next; //找到要插入位置的前一个节点
}
Node* newNode = new Node; //创建新节点
newNode->data = val; //将新节点的data赋值为val
newNode->next = prev->next; //将新节点的next指针指向前一个节点的next指针所指向的节点
prev->next = newNode; //将前一个节点的next指针指向新节点
}
//删除节点函数
void List::remove(int val){
Node* prev = head; //定义一个指向前一个节点的指针
while(prev->next != NULL && prev->next->data != val){
prev = prev->next; //找到要删除的节点的前一个节点
}
if(prev->next == NULL) return; //如果要删除的节点不存在,直接返回
Node* delNode = prev->next; //定义一个指向要删除的节点的指针
prev->next = delNode->next; //将前一个节点的next指针指向要删除节点的下一个节点
delete delNode; //删除要删除的节点
}
//查找节点函数
int List::find(int val){
Node* curr = head->next; //定义一个指向当前节点的指针,初始化为头节点的下一个节点
int pos = 0;
while(curr != NULL && curr->data != val){
curr = curr->next; //找到要查找的节点
pos++;
}
if(curr == NULL) return -1; //如果要查找的节点不存在,返回-1
return pos;
}
//遍历链表函数
void List::traverse(){
Node* curr = head->next; //定义一个指向当前节点的指针,初始化为头节点的下一个节点
while(curr != NULL){
cout << curr->data << " "; //输出当前节点的data
curr = curr->next; //指向下一个节点
}
}
//主函数
int main(){
List myList; //创建链表对象
int n, val, pos;
cout << "请输入链表的初始元素个数:";
cin >> n;
cout << "请输入链表的初始元素:";
for(int i=0; i<n; i++){
cin >> val;
myList.insert(i, val); //将元素插入链表
}
cout << "链表的初始元素为:";
myList.traverse(); //遍历链表,输出初始元素
cout << endl;
while(true){
int op;
cout << "请选择要进行的操作(1.插入 2.删除 3.查找 4.遍历 5.退出):";
cin >> op;
switch(op){
case 1:
cout << "请输入要插入的元素的位置和值:";
cin >> pos >> val;
myList.insert(pos, val); //将元素插入链表
cout << "插入成功!" << endl;
break;
case 2:
cout << "请输入要删除的元素的值:";
cin >> val;
myList.remove(val); //将元素从链表中删除
cout << "删除成功!" << endl;
break;
case 3:
cout << "请输入要查找的元素的值:";
cin >> val;
pos = myList.find(val); //查找元素在链表中的位置
if(pos == -1){
cout << "要查找的元素不存在!" << endl;
}
else{
cout << "要查找的元素在链表中的位置为:" << pos << endl;
}
break;
case 4:
cout << "链表中的元素为:";
myList.traverse(); //遍历链表,输出元素
cout << endl;
break;
case 5:
return 0;
default:
cout << "输入有误,请重新输入!" << endl;
break;
}
}
return 0;
}
```
这个示例代码实现了链表的初始元素输入、任意位置插入、删除、查找、遍历等功能。你可以根据需要进行修改和扩展。
阅读全文