问题
输入一系列单词,然后按字典排序,最后输出结果
例
输入:
单词的个数:3
stick
stack
stock
输出:
stack
stick
stock
题解
使用链串动态创建节点,使用冒泡法排序(可优化)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node{
char ch[15];
struct node *next;
}node;
node *creatHead(){
node *s;
s=(node*)malloc(sizeof(node));
s->next=NULL;
return s;
}
void creatNode(node *head,int n){
int i;
node *r,*s;
r=head;
for(i=1;i<n+1;i++){
s=(node *)malloc(sizeof(node));
printf("第%d行:",i);
scanf("%s",&s->ch);
s->next=NULL;
r->next=s;
r=s;
}
}
void outStrCopy( char s1[] , char s2[]){
int i;
int len1 = strlen (s1);
int len2 = strlen (s2);
int len = 0;
if (len1 <= len2){
len = len2;
} else {
len = len1;
}
for (i=0;i<len;i++){
s1[i] = s2[i];
}
}
//冒泡排序
void sort(node *head,int n){
int i,j;
char tp[15];
node *p;
p=head->next;
for(i=0;i<n-1;i++){
p=head->next;
for(j=0;j<n-i-1;j++){
if(strcmp(p->ch,p->next->ch)>0){
outStrCopy(tp,p->ch);
outStrCopy(p->ch,p->next->ch);
outStrCopy(p->next->ch,tp);
}
p=p->next;
}
}
}
void print(node *head,int n){
int i;
node *p;
p=head;
for(i=0;i<n;i++){
p=p->next;
printf("\n%s",p->ch);
}
}
void main(){
int n,i;
node *head;
printf("几行?:");
scanf("%d",&n);
head=creatHead();
creatNode(head,n);
sort(head,n);
print(head,n);
}