您的位置:首页 > 其它

递增序列排列

2017-06-05 17:33 141 查看
#include <iostream>
#include<malloc.h>
#include<stdio.h>
using namespace std;
typedef struct LNode
{
char data;
struct LNode *next;
}LinkList;
void InitList(LinkList *&L)
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
}
void  CreateListF(LinkList *&L ,char a[],int n)
{
LinkList *s;
int i;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
void DisList(LinkList *L)
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
void DestoryList(LinkList *L)
{
LinkList *pre=L,*p=L->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
void sort1(LinkList *&L)//此递增有序排列还有双链表的一种方法,其初始化头插尾插具体参见博客这里不详细介绍
{
LinkList *p,*pre,*q;
p=L->next->next;
L->next->next=NULL;
while(p!=NULL)
{
q=p->next;
pre=L;
while(pre->next!=NULL&&pre->next->data<p->data)
pre=pre->next;
p->next=pre->next;
//if(pre->next!=NULL)
//pre->next->prior=p;
pre->next=p;
//p->prior=pre;
p=q;
}
}
int main()
{
int i,n;
char  a[100];
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%c",&a[i]);
LinkList *L;
InitList(L);
CreateListF(L,a,n);
sort1(L);
DisList(L);
DestoryList(L);
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: