int_lyc 发表于 2018-2-18 15:48:45

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]
查看完整版本: C++实现一个单链表