C ---操作チェーンの動的言語データ構造

する#include <stdio.hに> 
する#include <STDLIB.H> 
の#include <string.hの> 
//#LENはsizeof(LinkedListの)を定義します。

構造体の学生{typedefは
	、int型のスコア 
	文字名[10]。
	構造体の学生は、次の*; 
} LinkedListの; 
/ ** 
*链表的创建、N为创建的节点的个数
** / 
LinkedListの*作成(int型N){ 
	LinkedListの*ヘッド、*ノード、* END; 
	ヘッド=(LinkedListの*)はmalloc(はsizeof(LinkedListの))。
	終了=ヘッド。
	文字名[10]。
	以下のために(INT iが= 0、I <N; I ++){ 
		ノード=(LinkedListの*)はmalloc(はsizeof(LinkedListの))。
		printf( "%学生ドールの名前を入力します:\ n"、I + 1); 
		scanf関数( "%s"は、名); 
		strcpyの(ノード- >名、名); 
		printf( "%学生ドールsのスコアを入力します。
		scanf関数( "%dの"、およびノード- >スコア)。 
		END->次に=ノードと、
		エンドノード=; 
	} 
	END->次に= NULL; 
	戻りヘッド; 
} 
/ ** 
*データリンクされたリストに、最初のインデックスのインデックスノード、元のリストポインタに挿入するノード、古い点のノード
** / 
ボイド挿入(LinkedListの*オールド、LinkedListの*ノード、INTインデックス){ 
	LinkedListの* TEMP =旧; 
	INT N- = 0; 
	一方、(N <インデックス&& temp- !>次に= NULL){ 
		TEMP = temp->次に、
		N - ++; 
	} 
	IF(TEMP = NULL){!
		ノード- >次に= temp->次に、
		temp->次に=ノード; 
	} 
	そう
		プット(「インデックス範囲outof 「); 

} 
/ * 
*追加のリスト要素
* / 
無効のappend(LinkedListの*リスト、LinkedListの*追記){
	LinkedListの* P; 
	P =リスト。 
	ながら(!P->次に= NULL){ 
		P = P->次;
	} 
	P->次=追記。
	P = APPEND。
} 
/ ** 
*链表的打印展示
** / 
空隙DISPLAYLIST(LinkedListの*リンク){ 
	一方(リンク- >次= NULL!){ 
		リンク=リンク- >次に、
		printf( "名:%sの\ tscoreた:%d \ n"は、リンク- >名、リンク- >スコア); 
	} 
} 
/ ** 
*链表的删除
** / 
空隙dellist(LinkedListの*リンク、INTインデックス){ 
	LinkedListの* T。
	int型温度= 0; 
	(!TEMP <インデックス&&リンク- >次= NULL){一方
		、T =リンク。
		一時++; 
		リンク=リンク- >次。
	} 
	(リンク= NULL!){もし
		T->次=リンク- >次に、
		無料(リンク)。
		プット(「範囲outofインデックス」)。 
/ ** 
*変更のリスト
** / 
空隙updateList(LinkedListの*リンク、LinkedListのノード*、INTインデックス){ 
	LinkedListのリンク* = T、T1 *; 
	INT TEMP = 0; 
	一方( TEMP <&& T-指数>次に= NULL){!
		T1 = T; 
		TEMP ++; 
		T = T->次に; 
	} 
	IF(T = NULL){!
		ノード- >次に= T->次に、
		T1->次に=ノード; 
		フリー(T); 
	} {他
		プット(「範囲索引outof」); 
	} 
} 
/ ** 
*指定されたノードのリストを取得
*リンクリストポインタの先頭を指すようヘッド
*最初のいくつかのノードのインデックスを取得する
** / 
LinkedListのgetNode(LinkedListのヘッド*、INTインデックス){ 
	int型I = 0; 
	LinkedListの* P、ノード; 
	P =ヘッド。
	しばらく(!私は<インデックス&& P = NULL){ 
		I ++; 
		P = P - >次。
	} 
	ノード= * P。
	ノードを返します。
} 
/ ** 
*链表数据域的打印
** / 
無効表示(LinkedListのノード){ 
	のprintf( "LinkedListの:{名:%S、スコア:%のD} \ n"は、node.name、node.score)。
} 
INTメイン(ボイド){ 
	int型N。
	プット(「ノード番号を入力してください:」); 
	scanf関数( "%のD"、&N); 
	LinkedListの*リスト=(n)を作成します。
	DISPLAYLIST(リスト); 
	プット(「の後にノードを挿入します。」); 
	LinkedListのは一時、*ノード。
	temp.score = 88; 
	strcpyの(temp.name、 "GWB"); 
	ノード=&TEMP。
	インサート(リスト、ノード、1); 
	DISPLAYLIST(リスト);
	LinkedListの* TP =(LinkedListの*)はmalloc(はsizeof(LinkedListの))。
	strcpyの(TP->名、 "小明"); 
	APPEND(リスト、TP); 
	DISPLAYLIST(リスト); 
	プット( "変更後:"); 
	LinkedListの* TP1 =(LinkedListの*)はmalloc(はsizeof(LinkedListの))。
	tp1->スコア= 99; 
	strcpyの(tp1->名、 "小芳"); 
	updatelist(リスト、tp1,3)。
	DISPLAYLIST(リスト); 
	プット( "削除した後:"); 
	dellist(リスト2)。
	DISPLAYLIST(リスト); 
	LinkedListのノード= getnode(リスト2)。
	ディスプレイ(ノード)。
	0を返します。
}

  

おすすめ

転載: www.cnblogs.com/g177w/p/12312063.html