单链表存储结构简单选择排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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->data
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);
}