【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18687

光コドの・苧
投稿者---zuting(2004/12/13 19:57:54)


・include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define kBufferSize (32768)

typedef struct _NODE NODE, *NODEPtr;
struct _NODE {
char *line;
NODEPtr next;
};

int RemoveReturnCode( char *str );
NODEPtr MakeNode( char *str );
int FreeNodeList( NODEPtr node );
void FreeNode( NODEPtr node );
int PrintNodeList( NODEPtr node );
NODEPtr ReverseNodeList( NODEPtr node );

int main( void ){
char buffer[ kBufferSize ];
NODEPtr head;

head = NULL;

while ( NULL != fgets( buffer, kBufferSize, stdin ) ) {
NODEPtr pivot;

RemoveReturnCode( buffer );
pivot = MakeNode( buffer );
if ( pivot = = NULL ) {
FreeNodeList( head );
return 1;
}

pivot->next = head;
head = pivot;
}
PrintNodeList( head );
head = ReverseNodeList( head );
PrintNodeList( head );
FreeNodeList( head );
return 0;
}

int RemoveReturnCode( char *str ) {
char *p;

if ( str == NULL ) return -1;

for ( p = str; *p != `\n¨ && *p != `\r¨ && *p != `\0¨; p++ )
;
*p = `\0¨;
return p Б str;
}

NODEPtr MakeNode( char *str ) {
NODEPtr node;

if ( str == NULL ) return NULL;

node = ( NODEPtr ) calloc( 1, sizeof( NODE ) );
if ( node != NULL ) {
node->line = ( char * ) calloc( strlen( str ) + 1,sizeof( char ) );
if ( node->line != NULL) {
strcpy( node->line, str );
node->next = NULL;
}
else {
free( node );
node = NULL ;
}
}
return node;
}

int FreeNodeList( NODEPtr node ) {
int ct;

ct = 0;
while ( node != NULL ) {
NODEPtr next;

next = node->next;
FreeNode( node );
ct++;
node = next;

return ct;
}

void FreeNode ( NODEPtr node ) {
free( node->line );
free( node );
}

int PrintNodeList( NODEPtr node ){
int ct;
for ( ct = 0; node != NULL; ct++, node = node->next )
printf( ^%d: %s\n ̄, ct+1, node->line );
return ct;
}

NODEPtr ReverseNodeList( NODEPtr node ) {
NODEPtr reverse;
reverse = NULL;
while ( node != NULL ) {
NODEPtr next;
next = node->next;
node->next = reverse;
reverse = node;
node = next;
}
return reverse;
}




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧