C++笔记(3):链表(结构体构成或者类构成)的冒泡排序

0引言:

对于数组来说,冒泡排序查找已经再熟悉不过了,最近在用链表完成部分作业。需要对链表存储结构进行排序,值得注意的是,我在学C的时候(数据结构没开,自己也没学,后悔....)觉得链表是针对结构体的。学C++接触了OPP编程,想到了一坨坨的对象它们也是能构成链表的链表原来是数据的存储结构!!!吐血,我得好好学学数据结构(无奈)。

1. BB两句

敲黑板!!! 重点注释1 :循环结束条件
 由于是循环链表,结束条件 就写成了 Head的上一个,就是Head->_pro,也就是最后一个元素
问题1:如果不是循环链表的话,结束条件改成:p != NULL 即可 

 敲黑板!! 重点注释2 :排序比较内容,这个很简单了
  我的代码是对字母的ASCII进行大小比较,按照字母从小到大排序。看你比较内容了

注意!!!:

在链表中,我采用的方法是交换值!交换值!交换值!

千万不要搞错了,这不是操作节点的。

因为我的节点中数据少,暂时没有直接去交换节点

日后在数据多的时候直接操作节点来排序!!!

          好了,看代码:

2. 链表的冒泡排序代码:

// 排序
void Sort_People(TeleNumber* List)
{
	// TeleNumber: 链表存储结构,(单项,双向)单链表/循环链表都可以的呢!无所谓的
	// 本段代码中 我的链表是:双向循环链表,按照字母顺序排列
	TeleNumber* p = new TeleNumber(),*q =new TeleNumber();

	for ( p = List; p != List->_pro ; p = p->_next)
	{  // 敲黑板!! 重点注释1 :
		// List 是头节点 ,由于是循环链表,结束条件 就写成了 Head的上一个,也就是最后一个元素
		// ?????如果不是循环链表的话,结束条件改成:p != NULL 即可 
		for ( q = List; q != List->_pro ; q = q->_next)
		{
			// 敲黑板!! 重点注释2 :
			// NameFirstChar:返回值就是一个字母而已,进行大小比较,按照字母从小到大排序
			if ( q->NameFirstChar() > q->_next->NameFirstChar())
			{  
				// 以下是交换内容,看你的啦!
				//1. 交换两个节点的 用户名字
				string str = q->GetName();
				q->ModifyName( q->_next->GetName() );
				q->_next->ModifyName(str);
				//2. 交换两个节点的 用户电话号
				str = q->GetNumber();
				q->ModifyNumber(q->_next->GetNumber());
				q->_next->ModifyNumber(str);
				//3. 交换两个节点的 用户邮箱号
				str = q->Getemail();
				q->ModifyEmail(q->_next->Getemail());
				q->_next->ModifyEmail(str);
			}
		}
	}
	cout << "Sort over\n";
}

 

                          结语:  下次直接操作节点来排序!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值