精华内容
下载资源
问答
  • C语言单链表冒泡排序

    千次阅读 2019-03-18 14:52:17
    前言 大家在做学生成绩管理系统的时候,其中一个功能...所以在这里给大家分享下单链表冒泡排序冒泡排序 先说说冒泡排序的中心思想:通过对无序序列的相邻元素两两比较交换,每次把最大(小)的数据放在最后...

    前言

    大家在做学生成绩管理系统的时候,其中一个功能是要实现对学生的成绩从高到低排名,如果数据是存储在数组中的话,会很容易实现,但是这时成绩信息作为结构体成员被保存在单链表中,所以在每一轮交换排序的时候,地址不像数组那样可以简单通过下标转换而改变 所以在这里给大家分享下单链表的冒泡排序 。

    冒泡排序

    先说说冒泡排序的中心思想:通过对无序序列的相邻元素两两比较交换,每次把最大(小)的数据放在最后,这个过程就像是冒泡一样,所以叫他冒泡排序。

    void bubble_sort(int a[], int n)
    {
    	int i, j, temp;
    	for (j = 0; j < n - 1; j++)
    	for (i = 0; i < n - 1 - j; i++)
    	{
    		if (a[i] > a[i + 1])
    		{
    			temp = a[i];
    			a[i] = a[i + 1];
    			a[i + 1] = temp;
    		}
    	}
    }

    在数组中冒泡排序之所以容易实现的原因在于: 数组中数据在内存中的存储是连续的,并且通过下标的改变就可以轻松改变指针所指的地址

    但在链表中,每个节点在内存中的位置是不确定的,所以不容易改变指针所指地址,来重复对链表内相邻节点的数据进行比较。

    单链表冒泡排序

    • 创建链表
    #include <stdio.h>
    #include <stdlib.h>
    struct Node
    {
    	int data;
    	struct Node* next;
    };
    struct Node* createList()
    {
    	struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
    	headNode->next = NULL;
    	return headNode;
    }
    struct Node* createNode(int data)
    {
    	struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
    	headNode->data = data;
    	headNode->next = NULL;
    	return headNode;
    }
    void insertNodeByHead(struct Node* headNode, int data)
    {
    	struct Node* newNode = createNode(data);
    	newNode->next = headNode->next;
    	headNode->next = newNode;
    }
    void printList(struct Node* headNode)
    {
    	struct Node* pMove = headNode->next;
    	while (pMove)
    	{
    		printf("%d->", pMove->data);
    		pMove = pMove->next;
    	}
    	printf("\n");
    }
    int main()
    {
    	struct Node* list = createList();
    	insertNodeByHead(list, 3);
    	insertNodeByHead(list, 1);
    	insertNodeByHead(list, 2);	
    	insertNodeByHead(list, 5);
    	printList(list);
    	system("pause");
    	return 0;
    }
    • 冒泡排序
    void  BubbleSort(struct Node* headNode)
    {
    	struct Node* firstNode = headNode->next;
    	struct Node* secondNode = headNode;
    	while (firstNode != NULL)
    	{
    		while (firstNode->next != NULL)
    		{
    			if (firstNode->data > firstNode->next->data)
    			{
    				int temp = firstNode->data;
    				firstNode->data = firstNode->next->data;
    				firstNode->next->data = temp;
    			}
    			firstNode = firstNode->next;
    		}
    		//减少排序次数
    		firstNode = secondNode->next;
    		secondNode = firstNode;
    	}
    }

    单链表类型是有头节点的链表,理解过程之后你可以试着用无头节点类型的单链表实现以下,举一反三。更多内容,点击获取

     

    展开全文
  • 本实现主要采用交换指针的方法,其中附加有单链表及其相关的实现#include struct Node;typedef struct Node *PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;typedef int ElementType;struct Node{...

    本实现主要采用交换指针的方法,其中附加有单链表及其相关的实现

    #include

    struct Node;

    typedef struct Node *PtrToNode;

    typedef PtrToNode List;

    typedef PtrToNode Position;

    typedef int ElementType;

    struct Node

    {

    ElementType Element;

    Position Next;

    };

    List initList()

    {

    List L = (List)malloc(sizeof(struct Node));

    L->Next = NULL;

    return L;

    }

    void insertElement(List L)

    {

    int element;

    while(scanf("%d", &element))

    {

    Position tmp = (Position)malloc(sizeof(struct Node));

    tmp->Element = element;

    tmp->Next = L->Next;

    L->Next = tmp;

    }

    }

    void printList(List L)

    {

    Position P = L->Next;

    printf("L->");

    while(P != NULL)

    {

    printf("%d - >", P->Element);

    P = P->Next;

    }

    printf("NULL\n");

    }

    int get_length(List L)

    {

    int i = 0;

    Position P = L->Next;

    while(P != NULL)

    {

    i++;

    P = P->Next;

    }

    return i;

    }

    void BubblePoint(List L)

    {

    Position pre;

    Position cur;

    Position next;

    int i, j;

    i = get_length(L);

    printf("length = %d\n", i);

    while(i != 1)

    {

    pre = L;

    cur = L->Next;

    next = cur->Next;

    j = i;

    i--;

    while(j != 1)

    {

    j--;

    if(cur->Element > next->Element)

    {

    cur->Next = next->Next;

    pre->Next = next;

    next->Next = cur;

    pre = next;

    next = cur->Next;

    }

    else

    {

    pre = cur;

    cur = next;

    next = next->Next;

    }

    }

    }

    }

    int main(int argc, char **argv)

    {

    List L;

    L = initList(L);

    insertElement(L);

    printList(L);

    BubblePoint(L);

    printList(L);

    }

    执行结果如下:

    0818b9ca8b590ca3270a3433284dd417.png

    展开全文
  • 满意答案#include #include struct number { int num; struct number *next; }; void main() { struct number *head; struct number *p1,*p2,*p,*p3,*p4; int n=0,m,i,j; p1=p2=(struct number *)malloc(s...

    满意答案

    #include #include struct number { int num; struct number *next; }; void main() { struct number *head; struct number *p1,*p2,*p,*p3,*p4; int n=0,m,i,j; p1=p2=(struct number *)malloc(sizeof(struct number)); printf("\nWang jianfei 060806110006\n\n\n"); printf("Please enter the number: \n"); scanf("%d",&p1->num); head=NULL; while(p1->num!=NULL) { n=n+1; if(head==NULL) head=p1; else p2->next=p1; p2=p1; p1=(struct number *)malloc(sizeof(struct number)); scanf("%d",&p1->num); } p2->next=NULL; p=head; for(p4=head;p4!=NULL;p4=p4->next) { for(p3=head;p3->next!=NULL;p3=p3->next) { if(p4->num>p3->num) { m=p4->num; p4->num=p3->num; p3->num=m; } } p=head; } printf("\nNow,there %d numbers are: ",n); p=head; printf("\n"); if(head!=NULL) do { printf("%5d ",p->num); p=p->next; }while(p!=NULL); printf("\n"); getch(); }追问: 是画图,不是代码

    02分享举报

    展开全文
  • #include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node* next; }; struct Node* createList() ... struct Node* headNode = (struct Node *)malloc(sizeof(struct Node));... hea...
    #include <stdio.h>
    #include <stdlib.h>
    struct Node {
    	int data;
    	struct Node* next;
    };
    struct Node* createList()
    {
    	struct Node* headNode = (struct Node *)malloc(sizeof(struct Node));
    	headNode->next = NULL;
    	return headNode;
    }
    struct Node* createNode(int data)
    {
    	struct Node* newNode = (struct Node *)malloc(sizeof(struct Node));
    	newNode->data = data;
    	newNode->next = NULL;
    	return newNode;
    }
    void insertNode_head(struct Node* headNode, int data)
    {
    	struct Node* newNode = createNode(data);
    	newNode->next = headNode->next;
    	headNode->next = newNode;
    }
    void BubbleSort(struct Node* headNode)
    {
    	struct Node* firstNode = headNode->next;
    	struct Node* secondNode = headNode;
    	while(firstNode != NULL)
    	{
    		while(firstNode->next != NULL)
    		{
    			if(firstNode->data > firstNode->next->data)
    			{
    				int temp = firstNode->data;
    				firstNode->data = firstNode->next->data;
    				firstNode->next->data = temp;
    			}
    			firstNode = firstNode->next;
    		}
    		firstNode = secondNode->next;
    		secondNode = firstNode;
    	}
    }
    void printList(struct Node* headNode)
    {
    	struct Node* t = headNode->next;
    	while(t)
    	{
    		printf("%d ", t->data);
    		t = t->next;
    	}
    	printf("\n");
    }
    int main()
    {
    	struct Node* list = createList();
    	insertNode_head(list, 5);
    	insertNode_head(list, 2);
    	insertNode_head(list, 7);
    	insertNode_head(list, 3);
    	insertNode_head(list, 1);
    	printList(list);
    	BubbleSort(list);
    	printList(list);
    	return 0;
    }
    
    展开全文
  • node *sort(node *head){node *p,*p2,*p3;int n;int temp;n=length(head);if(head==NULL||head->next==NULL)return head;p=head;for(int j=1;j<n;++j){p=head;for(int i=0;i<...++i){i...
  • 稳定的排序有:冒泡,插入,基数,归并 不稳定的排序有:快排,选择,希尔,堆排序 各个排序的时间与空间复杂度: 单链表结构体: typedef struct tagRoad { unsigned short usSize; unsigned int uiLinkId; ...
  • C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序。
  • 详解单链表冒泡排序

    2020-05-11 23:36:49
    C语言,对单链表进行冒泡排序
  • C语言单链表冒泡排序

    万次阅读 2018-04-26 20:32:50
    C语言单链表实现冒泡排序 昨天在做学生成绩管理系统的时候,其中一个功能是要实现对学生的成绩从高到低排名,如果数据是存储在数组中的话,会很容易实现,但是这时成绩信息作为结构体成员被保存在单链表中,所以...
  • 给一个简单的数组冒泡排序算法和程序c语言链表冒泡排序,注释应写具体。不要在别处粘贴代码过来。我想实习的是交换的是它们的指针域也就是每个节点而不是结点后面的数据。C/C++ codestruct Node{int data;struct ...
  • 链表的排序,好的做法是交换指针域。链表节点的数据域可能比较大,交换数据域可能会涉及拷贝过多的内存,影响性能。链表是链式存储,无法随机访问(base_addr ...下面是交换指针域的一个单链表冒泡排序的例子: #inc...
  • 单链表冒泡排序(交换节点)

    千次阅读 2017-07-24 10:30:00
    代码如下: #include<iostream> #include<cstdlib> using namespace std; int num; typedef struct list { int data; struct list *next;...linklist Createlist(int n)...
  • C语言单链表基本操作总结

    千次阅读 多人点赞 2018-03-26 00:08:23
    C语言单链表基本操作 本文是参考他人实现的C语言单链表,对多篇博文整理的结果,仅作为学习笔记。文末有参考出处。1、单链表定义 链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续...
  • C语言单链表

    2020-04-25 16:13:27
    1.冒泡排序 2.单链表(一)常见操作创建,遍历,逆序,释放 #include<stdio.h> #include<malloc.h> /* struct llist / struct llist_node { int value; struct llist_node next; }; /* create single ...
  • 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表结构:SList.h#pragma oncetypedef int DataType;typedef struct SListNode{DataType data;struct SListNode* next;}...
  • //检查输入的数据是否在聊表中已经存在的函数 //链表排序函数——冒泡法,不改变节点位置,只改变节点中数据的存储位置 void sort(Node *); void delete_data(Node **,int); //删除节点函数 子函数文件node.c #...
  • 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表结构:SList.h#pragma oncetypedef int DataType;typedef struct SListNode{DataType data;struct SListNode* next;}...
  • C语言单链表简单操作

    2020-09-10 21:21:00
    利用C语言实现单链表简单操作 功能: 1. 建立一个含有若干个整数的单链表存储结构; 2. 输出单链表各节点的值; 3. 查询第i个结点的值,并输出; 4. 在第i个结点之后插入一个值为key的结点。 5. 删除第i...
  • 数据结构之---C语言实现冒泡排序

    千次阅读 2015-09-06 22:21:18
    数据结构之---C语言实现冒泡排序
  • 继续复习链表知识点,本章包含单链表的增加,删除,判断是否为空,和链表长度,以及链表的排序 几个知识点1.链表的判断是否为空//1.判断链表是否为空bool isempty_list(PNODE pHead) {return pHead->pNext == ...
  • C语言单链表
  • C语言单链表排序

    千次阅读 2015-11-26 20:09:54
    //选择排序 思想:1.从第一个节点开始,找出表中最小的元素,然后把该最小元素与 第一个节点的值换  2.从第二个节点开始, 找出表中最小的元素,然后把该最小元素与第二个节点的值换   3.从第三个节点...
  • 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储...
  • C语言单链表简单理解

    2020-04-23 18:07:47
    C语言链表简单理解 出于很多刚学习链表的很多小伙伴在学习链表的时候有很多困惑,我在此特地的出一篇博客,帮助我的朋友们。 (有写的不好的地方,大佬请勿略这篇内容) 链表里面的插入数据还是很有讲究的: 1)头插...
  • c语言单链表实现

    千次阅读 2014-10-15 20:49:54
    * 单链表。 * * 学生结构体: * id: 学生编号 * name:学生姓名 * math:分数 * next:指向下一个学生结构体 */ typedef struct student { int id; char name[20]; int math; struct student * next; }stu...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,731
精华内容 1,092
关键字:

c语言单链表冒泡排序

c语言 订阅