链表是学习数据结构最基本,最先学习的一种数据结构,熟练掌握链表是必须的!
实现:用类封装一个通用链表,实现增,删,修,查等操作。以存储int为例,并具有自动排序,反转功能!!
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
class List
{
private:
struct Notelist
{
int m_data;
Notelist *next;
};
Notelist *phead;
public:
List()
{
phead = NULL;
}
~List()
{
if(phead != NULL || pcount != NULL)
{
delete phead;
phead = NULL;
}
}
//添加链表元素:分第一次添加,得到头结点 和 之后添加
//有序排列(升序)
void Insert(int &data)
{
Notelist *pcur;
pcur = new Notelist;
if(phead == NULL)
{
pcount = new Notelist;
phead = pcur;
phead->m_data = data;
phead->next = NULL;
pcount = phead;
}
else
{
Notelist *p = NULL,*p1 = NULL;
if(phead->m_data >= data)
{
pcur->next = phead;
pcur->m_data = data;
phead = pcur;
}
else
{
p1 = phead;
p = p1->next;
while(p != NULL)
{
if(p->m_data >= data)
{
pcur->m_data = data;
p1->next = pcur;
pcur->next = p;
break;
}
p1 = p;
p = p->next;
}
pcur->m_data = data;
p1->next = pcur;
pcur->next = NULL;
}
}
}
//遍历链表
void Look()
{
Notelist *p = phead;
while(p != NULL)
{
printf("%d ",p->m_data);
p = p->next;
}
cout << " " << endl;
}
//链表反转:将链表中的结点一个个取出,记住当前结点和下一个结点。
void Changed()
{
Notelist *p,*p1;
if(phead != NULL && phead->next != NULL)
{
p = phead;
phead = NULL;
while(p != NULL)
{
p1 = p->next;
p->next = phead;
phead = p;
p = p1;
}
}
}
//删除结点,分三种情况:头结点,尾结点,中间结点
void Del(int &data)
{
Notelist *p = phead;
if(p->m_data == data)
{
phead = phead->next;
delete p;
}
else
{
Notelist *p1 = NULL;
while(p != NULL)
{
p1 = p;
p = p->next;
if(p != NULL && p->m_data == data)
{
if(p->next == NULL)
{
p1->next = NULL;
break;
}
p1->next = p->next;
break;
}
}
}
}
};