掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストから削除する (ID:58223)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いろんな場所で聞いていましたが、結局完成しませんでした_|‾|○ 皆さんの力ください(;∀;) リストから削除する、関数del_listを作成する。 という事なのですが、実行できたものの削除したと出たのに 実際削除されませんでした。★で囲まれてる場所があやしいので もしよろしければ、ご教授お願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct list{ char name[100]; struct list *next;//自己参照構造体 }NODE; void list_out(NODE *); void add_list(NODE);//リストの登録 NODE *del_list(NODE);//リストの削除 NODE *head;//先頭ポインタ void main(void) { NODE adddata; NODE deldata,*p; printf("***文字列の昇順に登録***\n"); printf("文字列入力 (CTRL+Zで終了)\n"); head = NULL; while(printf("->"),gets(adddata.name) !=NULL){ add_list(adddata); } printf("***リストの削除***\n"); list_out(head); printf("\n*** リストの削除 ***\n"); printf("削除文字列入力\n"); while(printf("->"),gets(deldata.name) !=NULL){ if((★p=del_list(deldata)★) ==NULL) printf("未発見\n"); else printf("%p番地のノードを削除\n",p); } printf("***リストの内容***\n"); list_out(head); } void list_out(NODE *p) { while(p != NULL){ printf("%p番地:%s\n",p,p->name); p=p->next; } } void add_list(NODE adddata) { NODE *new,*p,*back; new = (NODE *)malloc(sizeof(NODE)); if(new == NULL){ printf("メモリエラー"); exit(1); } strcpy(new->name,adddata.name);//文字列登録 if(head == NULL || strcmp(new->name,head->name) < 0){//リストの先頭なら /*ポインタのつなぎ換え*/ new->next=head; head=new; } else{ p=head;//挿入場所を探す先頭から調べましょう while(p != NULL && strcmp(new->name,p->name) >= 0){//自分以下の間繰り返す back=p; p=p->next; } /*ポイントのつなぎ替え*/ new->next= p; back->next=new; } } NODE *del_list(NODE deldata) { NODE *p,*back; if★(head == NULL)★return NULL;//リストが空なら、NULLを戻す if★(strcmp(deldata.name,head->name)){★//リストの先頭なら /*ポインタのつなぎ換え*/ back = head; ★head = head->next;★ return ★head;★ } else{ p=head;//削除するノードを探す while(★p != NULL && strcmp(deldata.name,p->name) >= 0★){ back=p; p=p->next; } /*pポインタの繋ぎ換え*/ if(p != NULL)★head->next= p;★ return p; } }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.