| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1585 人关注过本帖
标题:设单链表以非递减有序排列,设计算法删除值相同的多余的结点”求大神修改我 ...
只看楼主 加入收藏
玉垒浮云
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-11-22
收藏
得分:0 
这是正确的代码,给下次问同样问题的同学一个参考吧,感谢版主的帮助



#include<iostream>
 using namespace std;
 template<class T>
 struct Node//循环链表的结点结构体
 {
     T data;
     Node<T>*next;
 };
 template<class T>
 class list
 {
     public:
         list();
         list(T a[],int n);//建立链表
         ~list();
         int Length(){return length;}
         Node<T>*Index(int i);//按位查找,返回i结点指
         void Delete();//删除操作
         void print();//遍历操作
     private:
         Node<T>*first;//建立头结点
         int length;//表的长度
 };
 template<class T>//创建一个空表
 list<T>::list()
 {
     first=new Node<T>;
     first->next=first;
     length=0;
 }
 template<class T>
 list<T>::list(T a[],int n)
 {
     Node<T>*s,*r;
     first=new Node<T>;//生成头结点,这一步必不可少,通用的
     r=first;//r也指向头指针,尾指针初始化
     for(int i=0;i!=n;++i)
     {
         //每个数组建立一个结点,赋值
         s=new Node<T>;
         s->data=a[i];
         r->next=s;//将每个节点链在一起
         r=s;
     }
     r->next=first;//尾部结点与头结点相连
     length=n;
 }
 template<class T>
 list<T>::~list()//析构函数将循环链表的所有节点的存储空间释放
 {
     Node<T>*q;
     while(!length)
     {
         q=first;
         first=first->next;
         delete q;
     }
     cout<<"链表已经删除"<<endl;
 }
 
template<class T>
 Node<T> *list<T>::Index(int i)//按位查找的方法
 {
     Node<T> *p;
     p=first->next;
     if(i<0||i>length)
     {
         cout<<"位置"<<i<<"不对"<<endl;
         exit(1);
     }
     if(i==0)
         return first;
     for(int j=1;j<i;++j)
         p=p->next;
     return p;
 }
 
template<class T>
 void list<T>::Delete()
 {
     Node<T>*q,*p,*s,*t;
     t=new Node<T>;
     s=new Node<T>;
     p=first->next;
         
     while(p!=first)
     {        s=t=p;
             q=p->next;
         while(q!=first)
         {
             if(p->data==q->data)
             {   
                t->next=q->next;
                     length--;
            }
         else    t=q;
             q=q->next;
         }
         p=p->next;
     }
 
}//
 template<class T>
 void list<T>::print()//遍历操作
 {
     Node<T>*p;
     p=first->next;
     while(p!=first)
     {
         cout<<p->data<<",";
         p=p->next;
     }
     cout<<endl;
 }
 void main()
 {
     int a[]={1,2,6,5,3,4,6,3,5,4,2,3,1,2,4};
     list<int>mylist(a,15);
     mylist.print();
     cout<<"输出链表的长度"<<mylist.Length()<<endl;
     mylist.Delete();
     mylist.print();
     cout<<"链表的长度"<<mylist.Length()<<endl;
 }
2013-04-06 22:24
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
非递减有序,怎么可能不相邻?


[fly]存在即是合理[/fly]
2013-04-07 07:44
快速回复:设单链表以非递减有序排列,设计算法删除值相同的多余的结点”求大神修 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015232 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved