zoukankan      html  css  js  c++  java
  • 链表排序

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

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

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

    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;
    }
    測试结果例如以下:






  • 相关阅读:
    linux系统安装mysql数据库
    pyinstaller打包问题
    jmeter-Parameters和Body Data两种方式传参的区别
    jmeter-保存响应到文件
    Jenkins获取运行job的用户信息
    pytest插件(多重校验、用例依赖、执行顺序、失败重跑、重复执行、标记)
    谷歌开发者工具(F12)
    Linux常用命令
    一般什么原因会导致偶现问题?
    Fiddler模拟接口返回进行测试(二)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/3867209.html
Copyright © 2011-2022 走看看