3642|0

10

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

线性表的C++实现代码 [复制链接]

使用C++实现链表的操作。欢迎大家留言提问。
  1. // 1.cpp : 定义控制台应用程序的入口点。
  2. // 16.线性表.cpp : 定义控制台应用程序的入口点。
  3. //

  4. #include "stdafx.h"


  5. //enum bool{false,true};
  6. template<class T>
  7. class LinearList
  8. {
  9. public:
  10.         LinearList(){}
  11.         ~LinearList(){}
  12.         virtual int Size() const =0;          //表的最大长度
  13.         virtual int Length() const =0;                        //表的长度
  14.         virtual int Search(T &x) const =0;
  15.         virtual int Locate(int i) const =0;
  16.         virtual bool getData(int i,T &x) const =0;
  17.         virtual void setData(int i,T &x) =0;
  18.         virtual bool Insert(int i,T &x) =0;
  19.         virtual bool Remove(int i,T &x) =0;
  20.         virtual bool IsEmpty() const =0;
  21.         virtual bool IsFull() const =0;
  22.         virtual void Sort() =0;
  23.         virtual void input()=0;
  24.         virtual void output()=0;
  25.         virtual LinearList<T>operator=(LinearList<T>& L)=0;
  26. };

  27. template<class T>
  28. struct LinkNode
  29. {
  30.         T data;
  31.         LinkNode<T> * link;
  32.         LinkNode(LinkNode<T> *ptr=NULL)
  33.         {
  34.                 link=ptr;
  35.         }
  36.         LinkNode(const T&item,LinkNode<T> *ptr=NULL)
  37.         {
  38.                 data=item;
  39.                 link=ptr;
  40.         }
  41. };
  42. template<class T>
  43. class List
  44.         //class List:public LinearList<T>
  45. {
  46. protected:
  47.         LinkNode<T> *first;
  48. public:
  49.         List()
  50.         {
  51.                 first=new LinkNode<T>;
  52.         }
  53.         List(const T& x)
  54.         {
  55.                 first=new LinkNode<T>(x);
  56.         }
  57.         List(List<T> &L)
  58.         {
  59.                 T value1;
  60.                 LinkNode<T>*srcptr=L.getHead();
  61.                 LinkNode<T>*destptr=first=new LinkNode<T>;
  62.                 while(srcptr->link!=NULL)
  63.                 {
  64.                         value1=srcptr->link->data;
  65.                         destptr->link=new LinkNode<T>(value1);
  66.                         destptr=destptr->link;
  67.                         srcptr=srcptr->link;
  68.                 }
  69.                 destptr->link=NULL;
  70.         }
  71.         ~List(){makeEmpty();}
  72.         void makeEmpty()
  73.         {
  74.                 LinkNode<T>* q;
  75.                 while(first->link!=NULL)
  76.                 {
  77.                         q=first->link;
  78.                         first->link = q->link;
  79.                         delete q;       
  80.                 }
  81.         }
  82.         int Length()const
  83.         {
  84.                 LinkNode<T>* p;
  85.                 int count=0;
  86.                 p=first->link;
  87.                 while(p!=NULL)
  88.                 {
  89.                         p=p->link;
  90.                         count++;
  91.                 }
  92.                 return count;
  93.         }
  94.         LinkNode<T>* getHead()const
  95.         {
  96.                 return first;
  97.         }
  98.         bool IsEmpty()const
  99.         {
  100.                 return first->link==NULL?true:false;
  101.         }
  102.         bool IsFull()const
  103.         {
  104.                 return false;
  105.         }
  106.         LinkNode<T> * search(T x)
  107.         {
  108.                 LinkNode<T>* current;
  109.                 current=first->link;
  110.                 while(current!=NULL)
  111.                 {
  112.                         if(current->data==x)
  113.                         {
  114.                                 break;
  115.                         }
  116.                         else
  117.                         {
  118.                                 current=current->link;
  119.                         }
  120.                 }
  121.                 return current;
  122.         }
  123.         LinkNode<T>* Locate(int i)
  124.         {
  125.                 LinkNode<T>* current;
  126.                 current=first;
  127.                 int k=0;
  128.                 for (;k<i;k++)
  129.                 {
  130.                         if (current==NULL)
  131.                         {
  132.                                 break;       
  133.                         }
  134.                         current=current->link;
  135.                 }
  136.                 return current;
  137.         }
  138.         bool getData(int i,T &x)const
  139.         {
  140.                 if (i<=0)
  141.                 {
  142.                         return NULL;
  143.                 }
  144.                 LinkNode<T>*current=Locate(i);
  145.                 if (current==NULL)
  146.                 {
  147.                         return false;
  148.                 }
  149.                 else
  150.                 {
  151.                         x=current->data;
  152.                         return true;
  153.                 }
  154.         }
  155.         void setData(int i,T &x)
  156.         {
  157.                 if (i<=0)
  158.                 {
  159.                         return;
  160.                 }
  161.                 LinkNode<T>*current=Locate(i);
  162.                 if (current==NULL)
  163.                 {
  164.                         return;
  165.                 }
  166.                 else
  167.                 {
  168.                         current->data=x;
  169.                 }
  170.         }
  171.         bool Insert(int i,T &x)
  172.         {
  173.                 if(i<0)
  174.                 {
  175.                         return false;
  176.                 }
  177.                 LinkNode<T>*current=Locate(i);
  178.                 if (current==NULL)
  179.                 {
  180.                         return false;
  181.                 }
  182.                 LinkNode<T>*newNode=new LinkNode<T>(x);
  183.                 if (newNode==NULL)
  184.                 {
  185.                         cerr<<"存储器空间分配错误"<<endl;
  186.                         exit(1);
  187.                 }
  188.                 newNode->link=current->link;
  189.                 current->link=newNode;
  190.                 return true;
  191.         }
  192.         bool Remove(int i,T &x)
  193.         {
  194.                 LinkNode<T>*current=Locate(i-1);
  195.                 if (current==NULL||current->link==NULL)
  196.                 {
  197.                         return false;
  198.                 }
  199.                 LinkNode<T>*del=current->link;
  200.                 current->link=del->link;
  201.                 x=del->data;
  202.                 delete del;
  203.                 return true;
  204.         }
  205.         void output()
  206.         {
  207.                 LinkNode<T>*current=first->link;
  208.                 while (current!=NULL)
  209.                 {
  210.                         cout<<current->data<<endl;
  211.                         current=current->link;
  212.                 }
  213.         }
  214.         LinkNode<T>& operator=(List<T>&L)
  215.         {
  216.                 T value1;
  217.                 LinkNode<T>*srcptr=L.getHead();
  218.                 LinkNode<T>*destptr=first=new LinkNode<T>;
  219.                 while(srcptr->link!=NULL)
  220.                 {
  221.                         value1=srcptr->link->data;
  222.                         destptr->link=new LinkNode<T>(value1);
  223.                         destptr=destptr->link;
  224.                         srcptr=srcptr->link;
  225.                 }
  226.                 destptr->link=NULL;
  227.                 return *this;
  228.         }

  229. };
  230. int _tmain(int argc, _TCHAR* argv[])
  231. {
  232.         List<int> a(1);
  233.         int c=10;
  234.         int d=20;
  235.         a.Insert(0,c);
  236.         a.Insert(1,d);
  237.         int b=0;
  238.         b=a.Length();
  239.         cout<<b<<endl;
  240.         a.output();
  241.         List<int> h(a);
  242. //        h=a;
  243.         d=1000;
  244.         h.setData(1,d);
  245.         h.output();
  246.         return 0;
  247. }
  248. 输出结果如下:
复制代码



QQ截图20161021132420.png (28.09 KB, 下载次数: 0)

QQ截图20161021132420.png
此帖出自编程基础论坛

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表