递增序列排列

来源:互联网 发布:java开源开发平台 编辑:程序博客网 时间:2024/06/05 15:32
#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;}


 
原创粉丝点击