链表操作
使用类模板设计的链表建立、插入、删除操作。
类模板不懂的,可以看下我的template简单介绍
https://editor.csdn.net/md/?articleId=107548083
建立链表实际就是将struct结构体或者class类对象连接在一起
链表插入如图示:使用的是头插法
链表删除操作:
上代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
template<typename T>
struct Node
{
Node<T>* next;
T num;
};
template<typename T>
class Link
{
public:
Link();
~Link();
void CreateLink(T* content);
void InsertLink(T content,T station);
void DeleteLink(T station);
void Show();
private:
Node<T> *header;
};
template<typename T>
Link<T>::Link()
{
header = new Node<T>;
header->next = nullptr;
}
template<typename T>
void Link<T>::CreateLink(T *content)
{
Node<T>* cur = header;
while(*content)
{
Node<T>* insert = new Node<T>;
cur->next = insert;
insert->num = *content++;
insert->next = nullptr;
cur = insert;
}
}
//插入什么元素,插入位置
template<typename T>
void Link<T>::InsertLink(T content,T station)
{
Node<T>* cur = header;
int i = 0;
while (i<=station&&cur->next)
{
cur = cur->next;
if (i==station)
{
Node<T>* insert = new Node<T>;
Node<T>* now = cur->next;
insert->num = content;
cur->next = insert;
insert->next = now;
return;
}
i++;
}
cout << "超出链表范围" << endl;
}
template<typename T>
void Link<T>::DeleteLink(T station)
{
Node<T>* cur = header;
int i = 0;
while (i<=station&&cur->next)
{
if (i==station)
{
Node<T>* del = cur->next;
cur->next = del->next;
delete del;
return;
}
cur = cur->next;
i++;
}
cout << "超出链表范围" << endl;
}
template<typename T>
void Link<T>::Show()
{
Node<T>* cur = header;
while (cur->next)
{
cur = cur->next;
cout << cur->num << " ";
}
cout << endl;
}
template<typename T>
Link<T>::~Link()
{
Node<T>* cur = header->next;
while (cur)
{
Node<T> *point = cur;
cur = point->next;
delete point;
}
}
int main()
{
char str[256];
cin >> str;
Link<char> link;
link.CreateLink(str);
link.Show();
link.InsertLink('p',5);
link.Show();
link.DeleteLink(6);
link.Show();
return 0;
}