单链表的实现
单链表的实现
/*
功能:实现链表的增删改查
版本:1.0
时间:2019年3月17日
*/
#include<iostream>
#include<Windows.h>
using namespace std;
//定义一个链表的结构体
typedef struct listnode {
int data = 0;
listnode *next = nullptr;
}listnode, *linklist;
//链表的初始化
bool initlist(linklist &head) {
head = new listnode;
if (!head)return false;
head->next = nullptr;
return true;
}
//链表的创建——前插法
void createf(linklist &head) {
head = new listnode;
//对用户进行友好提示,提示输入
cout << "请输入你所想要创建链表元素的个数:";
int count; //count存储元素个数
cin >> count; //输入count的值
cout << "请依次输入各个元素,元素之间用空格隔开:";
//创建临时变量用来存储数据
linklist temp;
//循环输入各个数据
while (count--) {
temp = new listnode;
//输入元素
cin >> temp->data;
//判断head->next是否为空
if (!head->next) {
head->next = temp;
}
else {
temp->next = head->next;
head->next = temp;
}
}
cout << "前插法创建链表成功!" << endl;
}
//链表的创建——后插法
void createb(linklist &head) {
head = new listnode;
head->next = nullptr;
//对用户进行友好提示,提示输入
cout << "请输入你所想要创建链表元素的个数:";
int count; //count存储元素个数
cin >> count; //输入count的值
cout << "请依次输入各个元素,元素之间用空格隔开:";
//创建临时变量用来存储数据
linklist temp, tail;
//创建的尾指针刚开始指向head指针
tail = head;
//循环输入各个数据
while (count--) {
temp = new listnode;
//输入元素
cin >> temp->data;
tail->next = temp;
temp->next = nullptr;
tail = temp;
}
cout << "后插法创建链表成功!" << endl;
}
//链表元素的增加
void addelement(linklist &head) {
//设置一个cur
linklist cur;
cur = head;
//新增加的元素在原链表中的位置
int n;
cout << "请输入增加元素在该链表中的位置:";
cin >> n;
n--;
//循环找到当前位置的元素
while (n--) {
cur = cur->next;
}
//创建一个临时变量
linklist temp;
temp = new listnode;
cout << "请输入你所想要增加的元素:";
cin >> temp->data;
temp->next = cur->next;
cur->next = temp;
cout << "添加成功!" << endl;
}
//链表元素的删除
void delelement(linklist &head) {
//设置一个cur
linklist cur;
cur = head;
//删除的元素在原链表中的位置
int n;
cout << "请输入删除元素在该链表中的位置:";
cin >> n;
n--;
//循环找到当前位置的元素
while (n--) {
cur = cur->next;
}
//设置一个临时变量存储删除的数据
linklist temp;
temp = cur->next;
cur->next = cur->next->next;
delete temp;
cout << "删除成功!" << endl;
}
//链表元素的更改
void change(linklist &head) {
//设置一个cur
linklist cur;
cur = head;
//删除的元素在原链表中的位置
int n;
cout << "请输入所要更改元素在该链表中的位置:";
cin >> n;
n--;
//循环找到当前位置的元素
while (n--) {
cur = cur->next;
}
//提示用户输入想要更改的数据
int num;
cout << "请输入你所想要更改成的数字:";
cin >> num;
cur->next->data = num;
cout << "更改成功!"<<endl;
}
//显示(遍历)链表中的各个元素
void travel(linklist &head) {
linklist cur; //cur代替head
cur = head;
if (cur->next == nullptr) {
cout << "当前链表为空!" << endl;
}
else {
cur = cur->next;
while (cur) {
cout << cur->data << " ";
cur = cur->next;
}
}
}
//显示界面
void show() {
cout << "1.链表初始化" << endl;
cout << "2.前插法创建一个新链表" << endl;
cout << "3.后插法创建一个新的链表" << endl;
cout << "4.链表元素的增加" << endl;
cout << "5.链表元素的删除" << endl;
cout << "6.改变当前链表中的元素" << endl;
cout << "7.查看当前链表中元素" << endl;
cout << "8.退出" << endl;
}
int main() {
linklist head;
int n = 0;
while (n!=8) {
show();
cout << "请选择你所想要的进行的操作:";
cin >> n;
switch (n) {
case 1:
initlist(head);
break;
case 2:
createf(head);
break;
case 3:
createb(head);
break;
case 4:
addelement(head);
break;
case 5:
delelement(head);
break;
case 6:
change(head);
break;
case 7:
travel(head);
break;
case 8:
cout << "您已退出!" << endl;
break;
default:
cerr << "输入错误,请重新输入!" << endl;
}
Sleep(1000); //显示一秒
system("cls"); //清屏
}
system("pause");
return 0;
}
源码中可能有错误,请见谅!