单链表存储结构简单选择排序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单链表存储结构简单选择排序

#include

#include

#include

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

typedef int ElemType;

typedef struct Node /*结点类型定义*/

{

ElemType data;

struct Node * next;

}Node, *LinkList; /* LinkList为结构指针类型*/

void init_linklist(LinkList *H)/*对单链表进行初始化*/

{

*H=(LinkList)malloc(sizeof(Node)); /*申请结点空间*/

(*H)->next=NULL; /*置为空表*/

}

void CreateFromTail(LinkList L) //尾插入法建立单链表

{

Node *r, *s;

ElemType x;

r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/

scanf("%d",&x);

while(x!=-1)

{

s=(Node*)malloc(sizeof(Node));

s->data=x;

r->next=s;

r=s;

scanf("%d",&x);

}

r->next=NULL; /*将最后一个结点的next链域置为空,表示链表的结束*/ }

void print(LinkList L)

{

Node *p;

p=L->next;

while(p!=NULL)

{

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

p=p->next;

}

printf("\n");

}

c++:

#include"LinkList.h"

void sort(LinkList L)

{

Node *r; //r表示待排序列中,前面已排好序的序列最后一个元素

Node *p; //p表示待排序列中,后面未排序的第一个元素

Node *k; //k用于遍历未排序列以找到未排序的最小元素

Node *q; //q表示未排序列中的最小元素

Node *prior; //prior表示q的前驱结点

r=L;

while(r->next!=NULL)

{

q=p;

k=p->next;

while(k!=NULL) //查找未排序列中的最小元素q

{

if(k->datadata)

q=k;

k=k->next;

}

prior=r;

while(prior->next!=q) //查找未排序列中最小元素q的前驱结点 prior=prior->next;

if(p==q)

r=r->next;

else if(p==prior)

{

r->next=q;

p->next=q->next;

q->next=p;

r=r->next;

}

else

{

prior->next=q->next;

r->next=q;

q->next=p->next;

p->next=prior->next;

prior->next=p;

r=r->next;

}

}

}

{

LinkList L;

// ElemType mink,maxk;

init_linklist(&L);

printf("请输入数据,以-1为结束标志:\n"); CreateFromTail(L);

printf("排序前的初始序列是:\n");

print(L);

printf("排序后的序列是:\n");

sort(L);

print(L);

}

相关文档
最新文档