1.一方通行ループ:ここで学んだいくつかの関数の機能を整理しました 皆さんと一緒に進歩していきたいと思います 間違いがあればご指摘ください!
以下は、これらの機能の概要であり、この記事の本質でもあります。次の二重リンクのリストにより、教師が残した 3 つのタスクが完了します。
Status init(Node* p);//初期値を割り当てるには、ポインターを変更し、ポインターのアドレスを操作する必要があります**p
Status insert_head(Node p,Elementype value);//挿入関数は最初にアドレスに適用され、 result を返し、ポインター (前後の p->next ポイント) を処理します。
Status insert_tail(Node p,Elementype value);//アプリケーションのアドレスは上記と同じです。
Status insert_index(Node p,int index,Elementype) value);//最初に挿入位置の正当性を判断し、上記のようにスペースを適用し、ポインタのインデックスを回ループし、ポインタを処理します。
void print(Node p);//for ループを使用してリンク リストの出力を完了します。 int
length (Node p);//関数 function は上記と同じで、出力をカスタム出力に変更します。変数をカウントするだけです。戻り値に注意してください。Status delete_index(Node p,
int Index);//削除位置の妥当性を判断し、その位置までループし、ポインタを処理します。
Status delete_value(Node p,Elementype value);//シーケンステーブルを走査して、対応する値を見つけ、上記の関数を呼び出します (i count)。連続対応値
Status update_index(Node p, int Index, Elementtype value);//置換位置の合理性を判断し、対応する位置までループし、値を直接代入 Status update_value(Node p ,Elementype old_name,Elementtype new_name
) ;// シーケンス テーブルを走査し、対応する値を見つけて、新しい値を割り当てます。
Status query_index(Node p, int Index);//位置の合理性を判断し、指定位置までループして値を出力する
Status query_value(Node p,Elementype value);//数列テーブルを走査してiでカウントしながら、対応する値を判定し、i を出力します。
/************************************************ ****
> ファイル名: 4xunhuan.c
> 作成者: Li Shang
> 日期: 2018-08-02 15:38
*********************** ******************************/#include <stdio.h>
#include <stdlib.h>#F 0 を定義
#T 1 を定義typedef int ステータス;
typedef int 要素タイプ;
typedef struct ノード* ノード;struct ノード
{ 要素タイプの値; 構造体ノード* 次; };Status init(Node* p);//初期値を割り当てるには、ポインタ **p を変更する必要があります。
Status insert_head(Node p,Elementype value);//挿入関数は、最初にアドレスに適用され、結果を返し、その後処理されます。ポインタの
ステータス insert_tail (Node p,Elementype value);//アプリケーションのアドレスは上記と同じです
Status insert_index(Node p,intindex,Elementype value);//最初に挿入位置の正当性を判断し、スペースを適用します、その位置へのポインタをループし、そのポインタを処理 void
print( Node p);
int length(Node p);
Status delete_index(Node p, int Index);//削除位置の妥当性を判断し、その位置までループする、ポインターを処理します。
Status delete_value(Node p,Elementype value);// シーケンス テーブルを走査し、対応する値を見つけ、上記の関数 (i count) を呼び出し、連続する対応する値の処理に注意を払います Status update_index (Node p
, int Index, Elementtype value); // 置換位置の合理性を判断し、該当位置までループし、
Status を直接代入 update_value (Node p,Elementype old_name,Elementype new_name);// シーケンステーブルを走査し、対応する値を見つける、新しい値を代入します
Status query_index(Node p,int index);//位置の合理性を判断し、指定された位置までループして値を出力します
Status query_value(Node p,Elementype value);//シーケンス テーブルを走査して i でカウントしながら、対応する値を決定し、i を出力しますint main()
{ int i; ノードヘッド。 init(&head); for (i = 0; i < 10; i++) { insert_head(head,i + 1); プリント (ヘッド); for (i = 0; i < 10; i++) { insert_tail(head,i + 1); プリント (ヘッド);
update_index(head,2,6);
プリント(ヘッド);
insert_index(head,2,8);
プリント(ヘッド);delete_index(head,2);
プリント(ヘッド);delete_value(head,6);
プリント(ヘッド);
update_value(head,8,66);
プリント(ヘッド);クエリ値(head,3);
query_index(head,6);
0を返します。
}ステータス init(Node* p)
{ Node newnode = (Node)malloc(sizeof(struct node));//アニメーション态空间 if(NULL == newnode) { return F; 新しいノード- >次 = 新しいノード; *p = 新しいノード; T を返します。}
ステータス insert_head(ノード p,要素タイプ値)
{ ノード newnode = (ノード)malloc(sizeof(struct ノード)); if(NULL == newnode) { return F; 新しい ノード -> 値 = 値; 新しいノード -> 次 = p -> 次; p -> 次 = 新しいノード; T を返します。}
ステータス insert_tail(ノード p,要素タイプ値)
{ ノードヘッド = p; ノード newnode = (ノード)malloc(sizeof(struct ノード)); if(NULL == newnode) { return F; while (head != p->next) { p = p->next; 新しい ノード->値 = 値; newnode->next = p->next; p->next = 新しいノード; T を返します。}
ステータス insert_index(ノード p,int インデックス,要素タイプ値)
{ int i; if(インデックス < 0 || インデックス > 長さ(p) - 1) { printf("インデックスがエラーです\n"); Fを返します。 ノード newnode = (ノード)malloc(sizeof(struct ノード)); if(NULL == newnode) { return F; } for(i = 0;i < インデックス;i++) { p = p->next; 新しい ノード->値 = 値; newnode->next = p->next; p->next = 新しいノード; T を返します。}
void print(Node p)
{ ノードヘッド = p; while(head != p->next) { printf("%d ",p->next->value); p = p->next; printf ("\n"); }
int length(ノード p)
{ ノードヘッド = p; int len = 0; while(head != p->next) { len++; p = p->next; lenを 返します。}
ステータス delete_index(ノード p,int インデックス)
{ if(インデックス < 0 || インデックス > 長さ (p) - 1) { printf("インデックスがエラーです\n"); Fを返します。 int i; for (i = 0; i < インデックス; i++) { p = p->next; ノード 温度 = p->next->next; 無料(p->次); p->next = 一時; T を返します。
}
ステータスの削除値(ノード p,要素タイプの値)
{ int i = 0; ノードヘッド = p; printf("値 = %d\n",値 ); while(head != p->next) { if (value == p->next->value) { delete_index(head,i); printf("削除アドレスは %d\n",i ); } else { i++; p = p->next; Tを 返し ます。}
ステータス update_index(ノード p,int インデックス,要素タイプ値)
{ if(インデックス < 0 || インデックス > 長さ (p) - 1) { printf("インデックスがエラーです\n"); Fを返します。 }
int i;
for (i = 0; i < インデックス; i++)
{ p = p->next; p- >next->value = 値; T を返します。}Status update_value(Node p,Elementype old_name,Elementype new_name)
{ Node head = p; while(head != p->next) { if(p->next->value == old_name)//また間違っています、代入と等しい違いに注意してください { p->next->value = new_name; } p = p->next; } return T; }
Status query_index(Node p,int index)
{ if(index < 0 || Index > length(p) - 1)//挿入位置が正しく入力されているか判定 { printf("index is error\n"); return F ; } int i; for(i = 0;i < Index;i++) { p = p->next; } printf("index %d is %d\n",i,p->next->value ); }
ステータスクエリ値(ノード p,要素タイプ値)
{ ノードヘッド = p; int i = 0; int フラグ = 0; printf("必要な値は %d\n",value); while(head != p->next) { if(value == p->next->value) { printf("%d ",i); フラグ++; } i++; p = p->next; if (flag == 0) { printf("見つかりません\n"); printf ("\n"); T を返します。}
2. 二重リンク リスト、一部の機能コードが変更され、一方向リンク リストに基づいてデバッグが成功しました。
/************************************************ ***** ****
> ファイル名: 5shuangxiang.c
> 作成者: Li Shang
> 日付: 2018-08-03 15:56
****************** ***** ******************************/#include <stdio.h>
#include <stdlib.h>#T 1 を定義
#F 0 を定義typedef int 要素タイプ;
typedef int ステータス;struct Node
{ struct Node* 前; 要素タイプの値。 struct Node* next; };typedef struct Node* ノード;
ステータス init(node* p);
ステータス insert_head(ノード p,要素タイプ値);
void printN(ノード p);
void printP(ノード p);
int 長さ(ノード p);
ステータス insert_tail(ノード p,要素タイプ値);
ステータス insert_index(ノード p,int インデックス,要素タイプ値);
ステータス delete_index(ノード p,int インデックス);
ステータスの削除値(ノード p,要素タイプの値);int main()
{ ノードヘッド; init(&head); int i; for (i = 0; i < 10; i++) { insert_head(head,i+1); printN (頭); printP(ヘッド);
for (i = 0; i < 10; i++)
{ insert_tail(head,i+1); printN (頭); printP(ヘッド);insert_index(head,5,99);
printN(ヘッド);delete_index(head,6);
printN(ヘッド);delete_value(head,6);
printN(ヘッド);
0を返します。
}ステータス init(node* p)
{ ノード newnode = (node)malloc(sizeof(struct Node)); if(NULL == newnode) { return F; 新しいノード- >次 = 新しいノード; 新しいノード->以前 = 新しいノード; *p = 新しいノード; }
ステータス insert_head(ノード p,要素タイプ値)
{ ノード newnode = (ノード)malloc(sizeof(struct Node)); if(NULL == newnode) { return F; 新しい ノード->値 = 値; newnode->next = p->next; p->next = 新しいノード; 新しいノード->以前 = p; 新しいノード->次->前 = 新しいノード; }
ステータス insert_tail(node p,Elementype value)
{ node newnode = (node)malloc(sizeof(struct Node)); if(NULL == newnode) { return F; 新しい ノード->値 = 値; /*ノードヘッド = p; while(head != p->next) { p = p->next; newnode- >next = head; p->next = 新しいノード; ヘッド->前 = 新しいノード; 新しいノード->前 = p;*/ 新しいノード->次 = p; p->前->次 = 新しいノード; 新しいノード->以前 = p->以前; p->前 = 新しいノード; }
void printN(node p)
{ ノードヘッド = p; while(head != p->next) { printf("%d ",p->next->value); p = p->next; printf ("\n"); }
void printP(node p)
{ ノードヘッド = p; while(head != p->prior) { printf("%d ",p->prior->value); p = p->前; printf ("\n"); }
int length(node p)
{ int i = 0; ノードヘッド = p; while(head != p->next) { i++; p = p->next; i を返し ます。}
ステータス insert_index(ノード p,int インデックス,要素タイプ値)
{ if (インデックス < 0 || インデックス > length(p) - 1) { printf("インデックスがエラーです\n"); Fを返します。 ノードnewnode = (ノード)malloc(sizeof(struct Node)); if (NULL == 新しいノード) { return F; int i; for(i = 0;i < インデックス;i++) { p = p->next; 新しい ノード->値 = 値; newnode->next = p->next; p->next = 新しいノード; 新しいノード->以前 = p; 新しいノード->次->前 = 新しいノード; T を返します。
}
ステータス delete_index(ノード p,int インデックス)
{ if (インデックス < 0 || インデックス > 長さ (p) - 1) { printf("インデックスがエラーです\n"); Fを返します。 int i; for(i = 0;i < インデックス;i++) { p = p->next; ノード 温度 = p->next->next; 無料(p->次); p->next = 一時; 一時->次->前 = p; T を返します。}
ステータスの削除値(ノード p,要素タイプの値)
{ int i = 0; ノードヘッド = p; while(head != p->next) { if (value == p->next->value) { delete_index(head,i); } else { i++; p = p->next; Tを 返し ます。}