データ構造、単一リンクリスト格納鎖の線状---

データ構造、単一リンクリスト格納鎖の線状---

リニアテーブルにI.はじめに

------リニアテーブルは、ゼロ以上のデータ要素の有限シーケンスである直鎖状構造、です。頭部および尾部要素に加えて、配列中に直線状ことを特徴とし、各要素が唯一の直接の前駆体であり、直接の前駆体なしでのみ直接後継、ヘッド素子、尾要素は即時の後継者を有していません。

-------共通線形構造配列、のような一本鎖、二本鎖、円形リスト。表中の線形要素は、同じ特定の抽象データ型です。それは、内蔵されていてもよいC言語の種類や構造、C ++は、カスタム型であってもよいです。

第二に、単一のリストの実現

-------リンクリスト鎖中と呼ばれる単一のノードが唯一のポインタフィールド、及び最終訪問を先頭から、円形のリンクされたリストから、異なる単一のリンクリストを次のノードのアドレスを格納するためのポインタ・フィールドではなく、ヘッドノードへの最後のノードからバック。

-------予備調製、統一された再定義この種の将来の変更を容易にするために何

# include "stdio.h"
# include "iostream"
# define  list_length 100
# define add_list 10
# define  ok 1
# define  error 0
typedef int status;
using namespace std;

------ ノード構造、およびポインタ型構造の再定義を確立します

typedef struct LNode{
	status data;		//节点的数据域
	struct LNode * next;		//节点的指针域
}*TNode;

------ 初期化リスト

int InitChainList( TNode&L) {
	L  = (LNode *)malloc(sizeof(LNode));
	if (!L)
		exit(OVERFLOW);
	L->data = 0;
	L->next = NULL;
	return ok;
}

ちなみに、そこに確かに、好奇心旺盛な子供用の靴新しいものではないだろうもちろん、あなたが新しい使用することができますが、私はただ単に検討中のmallocに、ハハ思いやりであることを理由に、すべての人のレビューと一緒に、です:malloc関数/新しい/削除が自由であるとの違い
を実際には、使用ほとんどの場合、両方のは、一般的なことができますが、我々はまだ彼の二つの違いを知っている必要があります。

1、mallocとfree標準関数のC ++ / C言語、新しい/削除C ++演算子です。

2、彼らは動的メモリと空きメモリを適用するために使用することができます。新しい/削除は、実際には、根本的なmalloc関数が実行されます/無料。新しいと自動的に実行削除対象のコンストラクタで作成されたときので、オブジェクトが消える前に、しかし、新しい/削除賢くは、デストラクタが自動的に実行されます。

図3は、新しいポインタが指定されたタイプを返し、自動的に必要なサイズを計算することができます。以下のような:

int *p = new int; //返回类型为int*类型,大小为sizeof(int);

malloc関数ユーザーは、サイズを指定する必要があり、戻り値の型がサイレントvoid *型である、それは実際のポインタ型に強制的にする必要があります。

int *p = (int*)malloc(sizeof(int));//返回类型为void*,必须强行转换为实际类型的指针,而且还得计算大小

------ 増加ノード

int addChainList(TNode &L,status elem) {
	TNode p = (LNode*)malloc(sizeof(LNode));
	if (!p)
		exit(OVERFLOW);
	TNode q=L;
	while (q->next){
		q = q->next;
	}
	q->next = p;
	p->data = elem;
	p->next = NULL;
	return ok;
}

あなたが最後のノードにリストを横断しなければならないときにここでノードを追加し、最後のノードの次のフィールドに接続されて良いノードを適用します。

------ 削除ノード

int deleChainList(TNode &L, int index,status&s) {
	TNode p = L->next;
	int i = 0;
	while (p&&index>=0) {
		if (i==index-1){
			TNode q = p->next;
			p->next = q->next;
			s = q->data;
			free(q);
		}
		p = p->next;
		i++;
	}
	return ok;
}

ここでマークされた要素のインデックスを削除し、最初に、前の要素のインデックス、インデックス先行および後続の接続を達成するための前駆体、すなわち、インデックスに割り当てられた後続の要素のインデックス、および一時的ノードQ点インデックスノードとを見つけます。フリー(Q)、除去要素Sに割り当てられた値。

------- インデックスindexにアクセス要素

int ChainListEleAt(TNode L,int index,status&s) {
	TNode p = L;
	int i = 0;
	while (p->next) {
		p = p->next;
		if (i==index){
			s = p->data;
			break;
		}
		i++;
	}
	return ok;
}

ここでは、以前のアイデアと一致しています。

最初の記事センドでは、フィードバック、共通の進行にいつでも質問をすることを願って!

リリース元の4件の記事 ウォンの賞賛4 ビュー210

おすすめ

転載: blog.csdn.net/weixin_42183953/article/details/88652796