#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; }
递增序列排列
最新推荐文章于 2023-03-27 17:17:17 发布