单链表冒泡排序(交换节点)

代码如下:

#include<iostream>
#include<cstdlib>
using namespace std;
int num;
typedef struct list
{
    int data;
    struct list *next;
}Lnode,*linklist;
linklist Createlist(int n)//构建带头结点的链表
{
    linklist p, head,tail;
    head = (linklist)malloc(sizeof(Lnode));
    tail = NULL;
    head->next = tail;
    for (int i = 0; i < n; i++)
    {
        p = (linklist)malloc(sizeof(Lnode));
        cin >>p-> data;
        p->next = NULL;
        if (tail == NULL)
            head->next = p;
        else
            tail->next = p;
        tail=p;
    }
    return head;//返回头结点的地址
}
void sortlist(linklist head)//对链表进行bubble sort
{
    linklist pre, p,tail;
    tail = NULL;
    while (head->next != tail)
    {
        pre = head;
        p = head->next;
        while (p->next!=tail)
        {
            if (p->data > p->next->data)
            {
                pre->next = p->next;
                p->next = pre->next->next;
                pre->next->next = p;
            }
            else
                p = p->next;
            pre = pre->next;
        }
        tail = p;
    }
}
int main()
{
    cin >> num;
    linklist head,x;
    head = Createlist(num);
    sortlist(head);
    x = head->next;
    while (x != NULL)
    {
        cout << x->data;
        x = x->next;
    }
    cout << endl;
    return 0;
}
时间: 2024-10-09 02:14:19

单链表冒泡排序(交换节点)的相关文章

单链表 --- 冒泡排序 约瑟夫环

1.冒泡排序: void BubbleSort(ListNode *&pHead)//冒泡排序 { ListNode *tail=NULL; assert(pHead!=NULL&&pHead->_next!=NULL); while(tail!=pHead->_next) { ListNode *prev=pHead; ListNode *cur=pHead->_next; while(cur!=tail)   //单次排序 { if(prev->_dat

单链表冒泡排序

#include <stdio.h>#include <stdlib.h>struct node{    int data;    struct node *next;};struct node* create_list(int a[],int len){    struct node *phead;    struct node *ptr;    struct node *pre;    phead=(struct node *)malloc(sizeof(struct node

【C语言】单链表的相关热点面试题(包括:从尾到头打印,逆置,冒泡,寻找中间节点,倒数k节点)

从尾到头打印单链表 void FromTailToHeadPrint(SListNode*& head) {     stack<SListNode*> s;     SListNode* cur = head;     while (cur)     {         s.push(cur);         cur = cur->_next;     }     while (!s.empty())     {         cout << s.top()-&

C语言实现单链表,单链表面试题面试

单链表是学习不可缺少的一个重要模块,在面试中也会出很多的单链表变种问题,今天就把他们汇总宋总结一下 首先来是实现一个简单的单链表: (在这里,一些简单的实现单链表的操作函数就不备注了) typedef  int DataType;//typedef了一个类型,以后如果想要改变单链表节点内储存数据的类型就可以直接在这里改变 typedef struct SListNode { DataType data;           //数据 struct SListNode* next;  //指向下一

笔试,面试,C/C++,数据结构单链表排序(改进冒泡排序)

void BubbleSortNode(SListNode *&pHead)//单链表排序 {  assert(pHead);  SListNode *tail = NULL;  int Bool = 0;  //若没有进行交换提前返回  while (tail!=pHead->next)  {   Bool = 0;   SListNode *tmp = pHead;   SListNode *tmpnext = tmp->next;   while (tmp->next !=

详谈单链表之合并and冒泡排序

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong> 线性表一章基本看完了,但是感觉还学得太少,应该和一些经典的算法相结合,看看自己应用的如何.不得不承认自己只是做简单的实现,并没有对代码进行太多的优化...希望各位大神莫怪~~废话少说,代码搞起..</strong></span> <strong><span style="font-fa

12.单链表排序

12.单链表排序 思路: 参见基本函数13://冒泡排序链表,具体的做法是“狸猫换太子”,即只交换节点中的值,对链表结构不做改动. void sortList(Node*& Head); //链表排序 //排序的方法是不破坏结构,有“狸猫换太子”的意思,只进行value的交换,不破坏链表结构 void sortList(Node*& Head) {   int count=numOfNodes(Head);   if(count==0||count==1)   {    return ;

c++单链表基本功能

/*四川工程职业技术学院 15软件 */ head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status;//整形的状态值#define OK 1;//status参数#define ERROR 0;//status参数template <class type> class LinkNode{protected: LinkNode* head;public:

对于&quot;单链表逆置和递归&quot;的问题的理解.

一. 相关知识要点: 学习或了解基础数据结构和C语言, 对基础链表知识或相关知识有概况性认识. 例如: 本题目结构为: 1 #define elem_type int 2 3 typedef struct _single_list { 4 elem_type data; //所存的数据元素 5 _single_list *next; //所存的指针元素 6 }ListNode; 二. 问题的思考过程(本题以3种不同的方法解决): <1>类似于我们学习的C语言基础知识中的冒泡排序(参考C程序设计