C++实现一个单链表
本帖最后由 int_lyc 于 2018-2-18 15:53 编辑最近看了数据结构和算法入门,自己用C++实现了一个单链表
static/image/hrline/dot2.gif
过程如下:
定义一个点类
两个数据成员,一个存储数据,一个点类指针;
class Point
{
public:
int num;
Point *next;
};
定义一个链类
一个数据成员,指向空节点的点类指针;
class List
{
private:
Point *first = new Point();
};
然后是一些函数
构造函数、析构函数、接口函数;
<为了更好体现程序的工作,我加入了许多解释性的语句>
构造函数:
List(){std::cout<<"创建了一个单链表\n";}
析构函数:
<析构函数删除每一个new出来的点类对象,并提示>
List()
{
Point *p,*q;
p = first->next;
while(p != NULL)
{
q = p;
p = p->next;
std::cout<<"析构了元素"<<q->num<<"\n";
delete q;
}
std::cout<<"析构了一个单链表\n";
}
然后是增加、删除、打印函数:
增加:
<重载了增加函数>
<加在链尾用一个临时点类指针,插入用两个临时点类指针移到要加入的位置,然后new一个点类对象>
void add(int number);//加在链尾
void add(int number,int addr);//第二个参数是加入的位置
删除:
<两个临时指针,移到删除的位置,判断是否超过链表长度,通过变化删除要删除的对象>
void del(int addr);
打印:
<用一个临时指针遍历链表,打印出每一个点类对象储存的内容>
void print();
最后又增加了排序函数:
排序:
<先写一个函数返回数组长度>
int len();
<然后用冒泡排序实现链表的排序>
for(int i=0;i<len();i++)
{
for(int j=0;j<len()-i-1;j++)
{
if(temp->next->num > temp->next->next->num)
{
q = temp->next;
p = temp->next->next;
temp->next = p;
q->next = p->next;
p->next = q;
}
temp = temp->next;
}
temp = first;
}
至此,一个简陋的单链表完成;
static/image/hrline/dot2.gif
附上代码:
(https://github.com/int-lyc/Single_Linked_List)
页:
[1]