关于链表的排序问题。
链表的冒泡排序法。#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;
}
第三个问题的,在解决掉链表排序的问题时,
还有什么常用的排序方法?
如果可以的话,可以利用上面的代码情境描述一下么~