みなさん、どぉーも、ありがとーございます。。。
一応今回は、ソートの練習問題だったので、リスト構造のやりかたの練習をしてみます。
文字列ソート
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を使って書き直しました。
何度もすみません(_ _||)