好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

单链表排序php 单链表排序的时间复杂度

很多站长朋友们都不太清楚单链表排序php,今天小编就来给大家整理单链表排序php,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 一单链表中元素无序,编写算法将之排成有序序列 2、 单链表上难以实现的排序方法 3、 单链表冒泡排序 4、 单链表排序问题:int *PrintfElement3(LinkList *pointer, DataType MAX)提示类型冲突,实在是没找到. 5、 单链表实现简单选择排序 一单链表中元素无序,编写算法将之排成有序序列

    由冒泡排序得到启示,每趟均从头节点开始扫描,比较相邻两节点的数据,

满足特定要求时进行节点交换。

    需要注意的是,必须有一个指针保存当前节点的前一个位置,这样在交换

节点后链表不会断开;并且要指定一个哨兵节点作为每趟比较的终结点,该哨

兵节点实际上就是有序区的首节点。

struct Node {

    int data;

    Node *next;

};

/* 因为排序后头结点指针可能发生改变,所以参数是二级指针 */

void listSort(Node **head)

{

    if(head == NULL || *head == NULL)

        return;

   

    Node *cur, *post, *pre, *sentinel = NULL;  // sentinel 标记有序区的首个节点

    bool sorted;

   

    do {

        pre = NULL;

        cur = *head;

        sorted = true;

       

        /* 反复用当前节点 cur 与下一个节点 post 进行比较 */

        while((post = cur->next) != sentinel) { 

            if(cur->data > post->data) { 

                sorted = false;  // 发生交换,则仍未有序

                cur->next = post->next;

                post->next = cur;

               

                if(pre != NULL)

                    pre->next = post;

                pre = post;

                

                if(cur == *head)

                    *head = post;  // 保证头指针指向最小的节点

            } else {

                pre = cur;

                cur = post;

            }

        }

        sentinel = cur;  // cur 为该趟排好序的节点

    } while(!sorted);    // 若未发生交换,则已经有序

}

单链表上难以实现的排序方法

单链表上难以实现的排序方法是快速排序。根据查询相关公开信息显示,单链表上难以实现的排序方法是快速排序法,包括堆排序和希尔排序,使用数组制作的静态树,使用单链表进行该算法。

单链表冒泡排序

我估计楼主是写链表排序被各种指针操作绕迷糊了。提供一个清晰的思路:反向冒泡,步骤如下:1。从链表头开始操作,将第一个元素和后面的比较,将大者换到后面去。反复操作直至链表尾。2。链表尾提前一位(因为最后一个元素已经是最大值,无需再处理了)3。重复1,2步 ,直至链表尾等于链表头,既表明处理结束struct Node

{

int value;

Node* next;

};void Sort(Node* head)

{

Node* tail = NULL; while(tail != head->next)

{

Node* pre = head;

Node* cur = pre->next;

while(cur != tail cur->next != tail)

{

if( cur->value > cur->next->value )

{

//交换当前节点和后一个节点

pre->next = cur->next;

cur->next = cur->next->next;

pre->next->next = cur;

}

pre = pre->next;

cur = pre->next;

} tail = cur;

}

}void main()

{

Node* head = new Node();

Node* cur = head; //使用带表头的链表

int n = 10;

//初始化链表数据

for( int i = n; i >0; i-- )

{

Node* node = new Node();

node->value = i;

cur->next = node;

cur = node;

} //排序 Sort(head);

}

单链表排序问题:int *PrintfElement3(LinkList *pointer, DataType MAX)提示类型冲突,实在是没找到.

你的SequenceLinkList函数里调用了PrintfElement3函数,但是函数SequenceLinkList却在PrintfElement3函数前声明,所以编译器发出错误的警告;

而且你在PrintfElement3函数里又调用了swap函数;但函数swap又在函数PrintfElement3之后声明,犯了同样的错误;

解决办法:

颠倒他们的声明顺序;

在代码开头声明他们的函数原型;

/*给你改好了,你也可以自己改,强化记忆*/

#include<stdio.h>

#include<stdlib.h>

#define DataType int

typedef struct Node     

{

    DataType data;

    struct Node *next;

}LinkList;

LinkList *CreateHeadList(void)   //创建头节点

{

    LinkList *pointer;

    pointer=(LinkList *)malloc(sizeof(LinkList));

    if(!pointer)

    {

        perror("Error1");

        exit(0);

    }

    pointer->data=-255;

    pointer->next=NULL;

    return pointer;

}

LinkList *CreateLinkList(LinkList *pointer,int num)   //创建链表

{

    LinkList *p;

    int i;

    p=pointer;

    for(i=0;i<num;i++)

    {

        p->next=(LinkList *)malloc(sizeof(LinkList));

        p=p->next;

        p->data=i+10;

    }

    p->next=NULL;

    return pointer;

}

void PrintfEveryElement(LinkList *pointer)                 //遍历整个链表

{

    LinkList *p=pointer->next;

    while(p!=NULL)

    {

        printf("%d\t",p->data);

        p=p->next;

    }

}

LinkList *DeleteOne_Element(LinkList *pointer,int NO_num)        //在NO_num删除一个元素

{

    LinkList *p,*p1;

    int i=1;

    p=pointer;

    if(p->next==NULL)

    {

        perror("Error2");

        exit(0);

    }

    while(p->next!=NULL  i<NO_num)

    {

        p=p->next;

        i++;

    }

    if(p->next==NULL)

    {

        perror("Error3");

        exit(0);

    }

    p1=p->next;

    p->next=p1->next;

    free(p1);

    return pointer;

}

LinkList *InsertOne_Element(LinkList *pointer,int NO_num1)   //在某一位置插入元素

{

    

    LinkList *p,*p1;

    int i=1;

    p=pointer;

    if(p->next==NULL)

    {

        perror("Error4");

        exit(0);

    }

    while(p!=NULL  i<NO_num1)

    {

        p=p->next;

        i++;

    }

    if(p->next==NULL)

    {

        p1=(LinkList *)malloc(sizeof(LinkList));

        p1->data=999;

        p->next=NULL;

    }

    else

    {

        p1=(LinkList *)malloc(sizeof(LinkList));

        p1->data=999;

        p1->next=p->next;

        p->next=p1;

    }

    return pointer;

}

void swap(int *p,int *p1)

{

    *p^=*p1;

    *p1^=*p;

    *p^=*p1;

}

int  *PrintfElement3(LinkList *pointer, DataType MAX)             

{

    LinkList *p=pointer->next;

    static DataType array[20];

    int i=0,j=0,flag,*p1;

    while(p!=NULL  i<MAX)

    {

        array[i]=p->data;

        i++;

        p=p->next;

    }

    for(i=0;i<MAX;i++)

    {

        flag=0;

        for(j=0;j<MAX-i-1;j++)

        {

            if(array[j]<array[j+1])

            {

                swap((array[j]),(array[j+1]));

                flag=1;

            }    

        }

        if(flag==1)

        break;

    }

    p1=array;

    return p1;

}

LinkList *SequenceLinkList(LinkList *pointer,int MAX)

{

    int max=MAX;

    DataType *H;

    H=PrintfElement3(pointer,max);

    

}

int main(void)

{

    LinkList *pointer;

    int num,NO_num,NO_num1;

    printf("请输入所需元素数量:");

    scanf("%d",num);

    pointer=CreateHeadList();

    pointer=CreateLinkList(pointer,num);

    PrintfEveryElement(pointer);

    printf("\n");

    printf("请输入删除元素的位置:");

    scanf("%d",NO_num);

    pointer=DeleteOne_Element(pointer,NO_num);

    PrintfEveryElement(pointer);

    printf("\n");

    printf("请输入插入元素的位置:");

    scanf("%d",NO_num1);

    pointer=InsertOne_Element(pointer,NO_num1);

    PrintfEveryElement(pointer);

    printf("\n");

    printf("排序输出:\n");

    pointer=SequenceLinkList(pointer,num);

    PrintfEveryElement(pointer);

    return 0;

}

单链表实现简单选择排序

单向链表的相关操作

实现功能:

1. 创建一个新链表。

2. 插入节点。

3. 删除节点。

4. 插入法排序链表(从小到大)。

5. 选择法排序链表(从小到大)。

6. 显示当前链表。

0. 退出程序。

代码见参考资料

关于单链表排序php的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于单链表排序php 单链表排序的时间复杂度的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did208088
更新时间:2023-05-03   阅读:25次

上一篇: php文件存储源码 php 文件存储

下一篇:关于rabbitmq和php的信息

最新资料更新

  • 1.php获取阴历 php获取日期
  • 2.php订单管理功能 php订单提醒功能
  • 3.php实例上传txt代码的简单介绍
  • 4.php项目详解 php项目总结
  • 5.form居中显示php form居中显示
  • 6.图片执行php代码 图片执行php代码是什么
  • 7.php验证邮箱合理 php发送邮件验证码
  • 8.php框架开发教程 php系统开发框架
  • 9.php大牛交流教程 php大神
  • 10.phppngjpeg的简单介绍
  • 11.phpoa推荐 php推荐书籍
  • 12.php变下载文件 php 下载文件
  • 13.PHP外部引用样式 php引用外部文件
  • 14.仿win桌面php源码 仿windows桌面
  • 15.php7.1des加密 php7 加密
  • 16.php瀑布流响应 html 瀑布流
  • 17.php调用裁剪插件 phpcrawl
  • 18.php显示json php显示客户端ip和服务器ip
  • 19.php编程实验总结 php简单实训项目
  • 20.最新php环境搭建 最新php环境搭建方案

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]