数据结构——5 单链表排序

来源:互联网 发布:极点五笔 linux 编辑:程序博客网 时间:2024/06/11 01:52

单链表——排序


单链表排序:基于冒泡法,每个节点不动,只动结点里面的x


#include<iostream>using namespace std;struct node       //node结构体,里面有一个node指针,用来指向下一个node对象{int x;node *next;   //指向什么类型的对象,就用什么类型的指针};node* create(int n)         //创建链表,参数n表示结点的个数,返回类型是结点指针node*{node *head=new node;    //建立头结点node *p=head;           //创建用于往后指的node指针for(int i=0;i<n;i++){node *temp=new node;     //new一个node指针temp->x=rand()%100;p->next=temp;            //将p的next指向创建的temp,把新节点连接到链表后面p=temp;                  //将p指向新结点temp,即p移动到下一个节点}p->next=NULL;                //创建完成后,p->next指向NULLreturn head;}void display(node *head)            //输出链表{  node *p;p=head->next;                //p重新指向头结点后的那个结点,即for循环创建的第一个结点if(p==NULL)cout<<"NULL List";while(p!=NULL)               //输出{cout<<p->x<<"  ";p=p->next;}cout<<endl;}/*排序的思想是:冒泡法排序,比较两个结点结构体中的x值,然后指交换x,两个结点的指针不动所以排序后输出链表,只要给链表的头结点就行思想很重要,刚开始,想交换两个结点,好难!!!*/void sort(node *head){node *p,*s;            //定义node指针变量int temp;   //用于交换两个结点中x的临时变量p=head->next;          //从第一个结点开始比较while(p){s=p;               while(s)           //注意:这里用s,不用s->next,不然最后一个结点比较不了{if(s->x < p->x)   //交换两节点的x值{temp=s->x;s->x=p->x;p->x=temp;}s=s->next;     //用于内循环的下一次比较}p=p->next;             //用于外循环的下一次比较}}int main(){node *list; list=create(16);           //建立链表display(list);             //输出显示建立的链表sort(list);   display(list);             //输出排序后的链表return 0;}


0 0
原创粉丝点击