用链表或者指针数组,输入5个字符串,对字符串排序并输出

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
typedef struct node{
    char data[100];
    struct node *next;
}LinkList;
/*尾插法创建链表*/
void CreateR(LinkList *&L){
    int i;
    char str[5][100];
    LinkList *r,*s;
    L = (LinkList*)malloc(sizeof(LinkList));
    r=L;
    for(i=0;i<5;i++){
        s = (LinkList*)malloc(sizeof(LinkList));
        strcpy(s->data,gets(str[i]));
        r->next = s;
        r = s;
    }
    r->next = NULL;
}
/*插入排序*/
void Sort(LinkList *&L){
    LinkList *p=L->next->next,*pre,*s;
    L->next->next = NULL;
    while(p!=NULL){
        s=p->next;
        p->next=NULL;
        pre=L;
        while(pre->next!=NULL&&strcmp(pre->next->data,p->data)<0){
            pre=pre->next;
        }
        p->next=pre->next;
        pre->next=p;
        p=s;
    }
}
int main()
{
    LinkList *L,*S;
    CreateR(L);
    for(S=L;S!=NULL;S=S->next){
        printf("%s ",S->data);
    }
    printf("\n");
    Sort(L);
    for(S=L;S!=NULL;S=S->next){
        printf("%s ",S->data);
    }
    return 0;
}

 

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
int main()
{
    char s[5][100],*p[5],*t;
    int n=5,i,j,k;
    for(i=0;i<n;i++){
        gets(s[i]);
        p[i]= s[i];
    }
    for(i=0;i<n-1;i++){
        k=i;
        for(j=i+1;j<n;j++){
            if(strcmp(p[k],p[j])>0){
                k=j;
            }
        }
        if(k!=i){
            t=p[i];
            p[i]=p[k];
            p[k]=t;
        }
    }
    for(i=0;i<n;i++){
        printf("%s ",p[i]);
    }
    return 0;
}

 

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
int main()
{
    char s[5][100],temp[100];
    int n=5,i,j,k;
    for(i=0;i<n;i++){
        gets(s[i]);
    }
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(strcmp(s[j],s[j+1])>0){
                strcpy(temp,s[j]);
                strcpy(s[j],s[j+1]);
                strcpy(s[j+1],temp);
            }
        }
    }
    for(i=0;i<n;i++){
        printf("%s ",s[i]);
    }
    return 0;
}

 

上一篇:编写一个C语言程序,产生一个存放26个英文字母组成的线性链表(a,b,c,…,z),并输出该线性表。


下一篇:链表合并