| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:关于链表的排序问题。
只看楼主 加入收藏
小小小小小黄
Rank: 1
等 级:新手上路
帖 子:28
专家分:4
注 册:2012-12-10
结帖率:44.44%
收藏
已结贴  问题点数:5 回复次数:2 
关于链表的排序问题。
链表的冒泡排序法。
#include <iostream>
using namespace std;
 
/*
* 编程实现单链表的排序
*/
typedef struct Student{
    int data;
    struct Student *next;
}node;
 
//获取单链表的长度
int lenList(node* head){
    if(head==NULL) return 0;
    node *p = head;
    int sum=0;
    while(p!=NULL){
        sum+=1;
        p=p->next;
    }
    return sum;
}
 
//对单链表排序,因为单链表不能随机访问,只能相邻交换
void sortList(node* head){
    int len = lenList(head);
    cout<<"len:"<<len<<endl;
    if(len==0) return;
    node *p = head;
    for(int i=1; i<len; ++i){
        //i表示冒泡的次数,共len-1次
        p = head;
        for(int j=0; j<len-i; j++){
            //j表示下落的数目
            if(p->data < p->next->data){
                int tmp = p->data;
                p->data = p->next->data;
                p->next->data = tmp;
            }
            p=p->next;
        }
    }
}
 
void printList(node* head){
    node *p = head;
    cout<<"List:"<<endl;
    while(p!=NULL){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
 
void main(){
    int arr[10] = {3,4,9,1,5,2,8,0,6,7};
    node* head = (node*)malloc(sizeof(node));
    head->data = arr[0];
    head->next = NULL;
 
    node *p = NULL;
    for(int i=1; i<10; ++i){
        p = (node*)malloc(sizeof(node));
        p->data = arr[i];
        p->next = head->next;
        head->next = p;
    }
    printList(head);
    sortList(head);
    printList(head);
    system("pause");
}


问题出现在第一段,

typedef struct Student{
    int data;
    struct Student *next;
}node;

我学习的语言是c++ 这里的typedef是c里面遗留下来的代码,
大致意思我也明白,类似于宏定义,就是对变量的重命名,

能否解释一下这段代码的内容究竟节点名是哪一个?
是如何定义的?

第二个问题是,冒泡排序法的应用。
这里的排序方法用的是冒泡排序,在两两比较的过程中,运用的是利用临时变量交换节点上的数值,
可否直接这样:比较相邻两个节点,如果满足交换条件,就交换两者的next指针指向节点。
譬如:
node *p = head;
node *q = head;
q = head -> next;
if(满足交换条件)
{
    p -> next = q -> next;
    q -> next = p;
}

第三个问题的,在解决掉链表排序的问题时,
还有什么常用的排序方法?
如果可以的话,可以利用上面的代码情境描述一下么~


搜索更多相关主题的帖子: include return 
2013-12-14 16:53
yangood
Rank: 2
等 级:论坛游民
帖 子:11
专家分:18
注 册:2013-11-1
收藏
得分:3 
1、node,typedef定义后Student就成为了结构体类型,具体可以去百科搜索;
2、你说的方法节点互换 就目前你的代码是可以的。但如果结构体中还有其他成员时候还是原方法好,可以实现代码扩展;
3、直接插入排序,希尔排序,快速排序,堆排序等等。具体可以自己去搜索了解,我说的就这些了。
2013-12-16 10:26
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:3 
问题解决了么?

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-12-18 23:10
快速回复:关于链表的排序问题。
数据加载中...
 
   



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

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