一个好的算法往往依赖于一个合理的数据结构
在很多情况下排序问题是不知道排序数据的个数的,通常的做法是
(1)建立一个空间很大的数组,保证空间够用,但是这样会造成很大的浪费
(2)在知道数组个数的情况下可以用malloc函数来分配数组个数是个变量的情况,但是在个数未知时就不能实现了
(3)利用链表实现动态的数组,这样不管数组的长度是多少都可以进行存储和排序了
下面通过冒泡排序来理解一下动态数组的排序,同时可以应用到其他的排序方法中
实现代码如下:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//定义一个链表结构体
typedef struct node
{
int data;
struct node *next;
}LNode,*LinkList;
//创建链表
LinkList createLinkList()
{
LinkList list = NULL;
int temp;
scanf("%d",&temp);
list = (LinkList)malloc(sizeof(LNode));
if(!list)
{
exit(0);
}
list->data = temp;
list->next = NULL;
return list;
}
//插入
void insertList(LinkList q,int temp)
{
LinkList p;
p = (LinkList)malloc(sizeof(LNode));
if(!p)
{
exit(0);
}
p->data = temp