单链表排序-冒泡

本文通过具体的C++代码示例介绍了类的定义、继承、多态等概念,并展示了如何实现链表的基本操作,如反转和冒泡排序。此外,还提供了字符串比较和压缩的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



#include<iostream>
using namespace std;
class A  
{  
}; 

class B  
{
 char ch;  
 virtual void func0()  {  }
};

class C 
{
 char ch1;
 char ch2;
 virtual void func()  {  } 
 virtual void func1()  {  }
};

class D: public A, public C
{  
 int d;  
 virtual void func()  {  }
 virtual void func1()  {  }
};  

class E: public B, public C
{  
 int e;  
 virtual void func0()  {  }
 virtual void func1()  {  }
};
class my_c
{
 int c;
};


class a1
{
 //virtual void func();
};
class a2:public virtual a1
{
 //virtual void foo();
};

template <typename T> class MakeFinal
{
      friend T;

private :
      MakeFinal() {}
      ~MakeFinal() {}
};

class FinalClass2 : virtual public MakeFinal<FinalClass2>
{
public :
      FinalClass2() {}
      ~FinalClass2() {}
};


/*class Try : public FinalClass2
{
public :
      Try() {}
      ~Try() {}
};*/

class CommonBase
{
 int co;
 virtual void print0() {  }
};

class Base1: virtual public CommonBase
{
public:
 virtual void print1() {  }
 virtual void print2() {  }
private:
 int b1;
};

class Base2: virtual public CommonBase
{
public:
 virtual void dump1() {  }
 virtual void dump2() {  }
private:
 int b2;
};

class Derived: public Base1, public Base2
{
public:
 void print2() {  }
 void dump2() {  }
 virtual void dumpD() {  }
private:
 int d;
};
int str_cmp(string left,string right)
{
 int i=0;
 while(left[i]==right[i])
 {
  if(!left[i])
   return 0;
  i++;
 }
 return left[i]-right[i];
}
string str_compress(string s)
{
 //aabbbccde
 //a2b3c2de
 string dst;
 int i=0,count=1;
 char count2str[10]={0};
 for(;i<s.length();i++)
 {
  char temp=s[i];
  if((i+1<s.length()) &&(s[i]==s[i+1]))
  {
   count++;
  }
  else
  {
   if(count>=2)
   {
    itoa(count,count2str,10);
    dst+=count2str;
    dst.append(s,i,1);
    count=1;
   }
   else
   {
    dst.append(s,i,1);
   }
  }
 }
 return dst;
}
typedef struct node
{
 int data;
 node *next;
}Node;
void add(Node * in,int data)
{
 in->next=new Node;
 in->next->data=data;
 in->next->next=NULL;
}
void destroy(Node *head)
{
 Node *in;
 while(head)
 {
  in=head->next;
  delete head;
  head=in;
 }
}
Node * ReverseLinList(Node *head)
{
 Node *cur_head,*pre;
 if(!head)
  return NULL;
 if(!(head->next))
  return head;
 pre=head->next;
 cur_head=head;
 while(pre)
 {
  head->next=pre->next;
  pre->next=cur_head;
  cur_head=pre;
  pre=head->next;
 }
 return cur_head;
}
Node * LinList_BubbleSort(Node *head)
{
 //Increase,断开链接
 Node *cur_head=NULL,*pre=head,*cur,*pre_pre;
 if(!head||!(head->next))
  return head;
 pre=head;
 cur=head->next;
 pre_pre=NULL;
 while(cur)
 {
  if(pre->data>cur->data)
  {
   //swap
   pre_pre->next=cur;
   pre->next=cur->next;
   cur->next=pre;
   pre_pre=cur;
   cur=pre->next;
  }
 }

}
int main(void)
{
 Node *head,*first;
 head=new Node;
 first=head;
 head->data=2;
 //head=head->next;
 add(head,3);
 head=head->next;
 add(head,4);
 first=ReverseLinList(first);
 //destroy(first);
 cout<<"A="<<sizeof(A)<<endl;    //result=1
 cout<<"B="<<sizeof(B)<<endl;    //result=8   
 cout<<"C="<<sizeof(C)<<endl;    //result=8
 cout<<"D="<<sizeof(D)<<endl;    //result=12
 cout<<"E="<<sizeof(E)<<endl;    //result=20
 cout<<"my"<<sizeof(my_c)<<endl;
 cout<<"a1 "<<sizeof(a1)<<"a2 "<<sizeof(a2)<<"dev "<<sizeof(Derived)<<endl;

 cout<<strcmp("ab","abc")<<str_cmp("ab","abc");
 //str_compress("aabbbccde");
 str_compress("aabbbcccc");
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值