• 链表排序


    链表是一种在物理存储上非连续,非顺序的存储结构,数据的逻辑关系是通过指针链接次序实现的,链表通过一系列结点组成,结点能够在执行时动态生成。每一个结点由两部分组成:数据域和存储下一结点的指针域。链表是一种常见的数据结构。

    要想进行链表排序,首先得建立一个单链表,程序代码是由一个数组转化而来,代码例如以下:

    先建立一个结点的结构体:

    struct node
    {
    	int val;
    	node *next;
    };
    node* _initial_node() //生成一个空的链表
    {
    	node *head=new node;
    	head->val=0;
    	head->next=NULL;
    	return head;
    }
    node* _create(int *A,int length)  //将一个线性数组转化为一个单链表
    {
    	node *p1,*p2,*head;
    	head=new node;
    	head->val=A[0];
    
    	p1=new node;
    	head->next=p1;
    
    
    	for(int i=1;i<length;i++)
    	{
    		if(i==length-1)
    			p2=NULL;
    		else
    			p2=new node;
    		p1->val=A[i];
    		p1->next=p2;
    		p1=p2;
    		
    	}
    	return head;	
    }
    链表排序能够适用于插入排序方法和冒泡排序方法:本文用插入排序来做演示:

    设计的思路:将要排序的链表中的数组的数值一一插入到一个新的空的链表中实现排序,插入的要求,检查数组和链表中的数值的大小,若比链表中的某个数值大,则将这个数值插入到这个结点的前面,若此链表中的全部的数都比这个数值大,则将这个数值插入到这个链表的最后的位置,插入数值的代码例如以下:

    void _add_node(node *A,int x)
    {
    	node *temp=A,*Base,*temp1;
    
    	Base=new node;
    	Base->val=x;
    	
    	if(temp->val<x)
    		Base->next=temp;
    	else
    	{
    		temp=A->next;
    		temp1=A;
    		while(temp)
    		{
    			if(temp->val<x)
    			{
    				Base->next=temp;
    				temp1->next=Base;
    				break;
    			}
    			temp1=temp;
    			temp=temp->next;
    		}
    		if(temp==NULL)
    		{
    			temp1->next=Base;
    			Base->next=NULL;
    		}
    	}
    }
    以下就是链表插入排序的实现代码:

    void main()
    {
    	int ia[]={9,2,0,3,1,8,3};
    	node *he=_create(ia,7);
    	node *A=_initial_node();
    	int num=he->val;
    	A->val=num;
    	for(he=he->next;he!=NULL;he=he->next)
    	{
    		num=he->val;
    		_add_node(A,num);
    	}
    	_show(A);
    }
    当中_show()函数是显示链表内容的函数,代码例如以下:

    void _show(node *A)
    {
    	for(;A!=NULL;A=A->next)
    	{
    		cout<<A->val<<" ";
    	}
    	cout<<endl;
    }
    測试结果例如以下:






  • 相关阅读:
    UVA 11525 好大好大的排列(线段树)
    UVA 11525 好大好大的排列(线段树)
    UVALive 4108城市天际线,混杂着递归与非递归的线段树
    UVALive 4108城市天际线,混杂着递归与非递归的线段树
    zencart搜索结果页面静态化 advanced_search_result
    .htaccess 一段神奇的跳转代码
    清除zencart分类页多页后面的&disp_order &sort字符串的方法
    zencart只有购买过此产品的客户才能评价产品
    mysql自增字段AUTO_INCREMENT重排或归零
    mysql语句修改zencart产品原价为特价的倍数
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/3867209.html
Copyright © 2020-2023  润新知