C++链表类的基本实现

来源:互联网 发布:360抢票软件 编辑:程序博客网 时间:2024/06/05 18:40

链表是学习数据结构最基本,最先学习的一种数据结构,熟练掌握链表是必须的!

实现:用类封装一个通用链表,实现增,删,修,查等操作。以存储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;
   }
  }
 }
 }
};

 

原创粉丝点击