初めてここを利用させていただきます。以下のようなプログラムを作りたいのですが勉強不足のためうまくいきません。
ご指導お願いします。
1、入力された文字をリストを用いて順次格納し,’-’が入力された後,次に入力された文字を持つ要素をリスト
から削除し,最後にリスト中の全て文字を出力するようなプログラム.
2、入力された整数を双方向リストを用いて順次格納する.0 が入力された時に整数の入力
を終了し,それまでに格納された全ての整数を表示するプログラム.表示は順方向,逆方向ともに行うこと.
自分で作ったソースファイル
1、
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char moji;
struct node *next;
int data;
} NODE;
NODE head;
int main(){
char n;
int data;
NODE *cur;
NODE *new;
NODE *pev;
head.next = NULL;
cur = head.next;
pev = &head;
do{
scanf("%c",&n);
if(n=='-') continue;
new = (NODE*)malloc(sizeof(NODE));
if(new==NULL){
printf("malloc error\n");
return 0;
}
new->moji = n;
new->next = head.next;
head.next = new;
} while(n!='-');
scanf("%d", &data); getchar();
while( cur != NULL ){
if( cur-> data != data)
{
pev = cur;
cur = cur->next;
}
pev->next = cur->next;
free( cur );
}
while(cur!=NULL){
printf("[%c]", cur->moji);
cur = cur->next;
} printf("\n");
return 0;
}
2、
#include <stdio.h>
#include <stdlib.h>
struct LIST
{
int data;
struct LIST* next;
struct LIST* prev;
};
struct LIST head;
int main(void)
{
struct LIST* p, *newcell;
int data;
puts( "追加する要素の値を入力して下さい" );
scanf( "%d", &data );
p = head.next;
if( p != NULL )
{
while( p != &head )
{
p = p->next;
}
}
newcell = malloc( sizeof(struct LIST) );
if( newcell == NULL )
{
puts( "メモリ不足" );
return;
}
if( data != 0)
newcell->data = data;
newcell->next = p->next;
newcell->prev = p;
p->next->prev = newcell;
p->next = newcell;
struct LIST *p;
for( p=head.next; p!=&head; p=p->next )
{
printf( "%d\n", p->data );
}
}
リスト・双方向リストについて
Re: リスト・双方向リストについて
ソースコードを張る場合は、code タグを利用される事を強く切望します。
それと、どう上手く行かないのかを書いた頂けると、大変助かります。
それなりに行数があり、インデントも崩れてるとなると処理を追うのも一苦労です。
また、具体的な問題点が明示されない場合、いちいちどこが問題なのかを探す事になりますが、上記の理由によりその困難さに拍車をかけます。
最終的には、こちらで IDE を起動し、コードを整形した上にデバッガを駆使することになりますが、それは大変手間で面倒な事です。
それと、どう上手く行かないのかを書いた頂けると、大変助かります。
それなりに行数があり、インデントも崩れてるとなると処理を追うのも一苦労です。
また、具体的な問題点が明示されない場合、いちいちどこが問題なのかを探す事になりますが、上記の理由によりその困難さに拍車をかけます。
最終的には、こちらで IDE を起動し、コードを整形した上にデバッガを駆使することになりますが、それは大変手間で面倒な事です。
Re: リスト・双方向リストについて
2つの課題があるようなので、とりあえず最初のから
見にくいにので、貼り直しました
どのように入力するのでしょうか?
例えば
abcdef-d
のようにでしょうか?
だとすると、36行目は何を入力していますか?
20行目でcur = head.next;をしていますが、このタイミングではNULLが入りますので、38行のwhileの中は行われません。
newという変数名は、紛らわしいのでできれば使って欲しくない。
newPとか別の名前にして欲しい。
見にくいにので、貼り直しました
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char moji;
struct node *next;
int data;
} NODE;
NODE head;
int main(){
char n;
int data;
NODE *cur;
NODE *new;
NODE *pev;
head.next = NULL;
cur = head.next;
pev = &head;
do{
scanf("%c",&n);
if(n=='-') continue;
new = (NODE*)malloc(sizeof(NODE));
if(new==NULL){
printf("malloc error\n");
return 0;
}
new->moji = n;
new->next = head.next;
head.next = new;
} while(n!='-');
scanf("%d", &data); getchar();
while( cur != NULL ){
if( cur-> data != data)
{
pev = cur;
cur = cur->next;
}
pev->next = cur->next;
free( cur );
}
while(cur!=NULL){
printf("[%c]", cur->moji);
cur = cur->next;
} printf("\n");
return 0;
}
どのように入力するのでしょうか?
例えば
abcdef-d
のようにでしょうか?
だとすると、36行目は何を入力していますか?
20行目でcur = head.next;をしていますが、このタイミングではNULLが入りますので、38行のwhileの中は行われません。
newという変数名は、紛らわしいのでできれば使って欲しくない。
newPとか別の名前にして欲しい。
non