みなさん、どぉーも、ありがとーございます。。。
一応今回は、ソートの練習問題だったので、リスト構造のやりかたの練習をしてみます。
文字列ソート
-
管理人
Re:文字列ソート
そういえばソートして表示って問題の言葉に捉われなければ、単純に比較してコピーするだけの方がずっと計算早いですね。
結局リストと同じことになりそうですけど。
リストの配列版というか
結局リストと同じことになりそうですけど。
リストの配列版というか
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
void disp(int num,int p[/url]){
for(int i=0;i<=num;i++)
printf("%d ",p);
printf("\n");
}
int main(void){
int i,j,num=0,*p,*pp,x;
p = (int *)malloc(sizeof(int)*(num+1));
while(1){
printf("Input ---> ");
if(scanf("%d",&x) == EOF)
break;
else {
pp = (int *)malloc(sizeof(int)*(num+1));
memcpy(pp, p, sizeof(int) * (num+1));
free(p);
p = (int *)malloc(sizeof(int)*(num+2));
memcpy(p, pp, sizeof(int) * (num+1));
free(pp);
}
if(num>0){
for(i=0;i<num;i++)
if(p>x) break;
for(j=num;j>=i;j--)
p[j+1]=p[j];
p=x;
}
else
p[0]=x;
disp(num,p);
num++;
}
free(p);
return 0;
}-
管理人
Re:文字列ソート
#include <stdio.h>
#include <stdlib.h>
void disp(int num,int p[/url]){
for(int i=0;i<=num;i++)
printf("%d ",p);
printf("\n");
}
void sort(int *p,int num,int x){
int i,j;
for(i=0;i<num;i++) if(p>x) break;
for(j=num;j>=i;j--) p[j+1]=p[j];
p=x;
return ;
}
int main(void){
int i,j,num=0,*p,x;
p = (int *)malloc(sizeof(int)*(num+1));
while(1){
printf("Input ---> ");
if(scanf("%d",&x) == EOF) break;
else p=(int *)realloc(p,sizeof(int)*(num+2));
if(num>0) sort(p,num,x);
else p[0]=x;
disp(num,p);
num++;
}
free(p);
return 0;
}reallocを使って書き直しました。
何度もすみません(_ _||)