单链表冒泡排序

#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));
    int i=0;
    phead->data=a[i];
    phead->next=NULL;
    ptr=phead->next;
    pre=phead;
    for(i=1;i<len;i++)
    {
        ptr=(struct node *)malloc(sizeof(struct node));
        ptr->data=a[i];
        ptr->next=NULL;
        pre->next=ptr;
        ptr=ptr->next;
        pre=pre->next;
    }
    return phead;
}
void print_list(struct node *phead)
{
    struct node *ptr=phead;
    while(ptr != NULL)
    {
        printf("%d ",ptr->data);
        ptr=ptr->next;
    }
    
    printf("\n");
}
struct node *bubble(struct node *phead,int len)
{
    struct node *ptr,*next;
    int temp;
    for(int i=0;i<len;i++)
    {
        ptr=phead;
        next=ptr->next;
        for(int j=len-i-1;j>0;j--)
        {
            if(ptr->data > next->data)
            {
                temp=ptr->data;
                ptr->data=next->data;
                next->data=temp;
            }
            ptr=ptr->next;
            next=next->next;
        }
        print_list(phead);
    }
    return phead;
}

int main()
{
    int a[10]={
        5,3,6,8,9,6,5,4,2,7
    };
    
    struct node *phead;
    phead=create_list(a,10);
    print_list(phead);
    phead=bubble(phead,10);
    print_list(phead);
}

时间: 2024-10-09 02:14:22

单链表冒泡排序的相关文章

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

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<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))

【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

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程序设计

对带头结点的单链表的简单操作

#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<memory.h> #define DataType int           //int 可以改写为其它数据类型 typedef struct Node { DataType data; struct Node *next; }Node,*pNode;          //定义结点结构体