(郝斌講学)データ構造学習編(三)---チェーンテーブルのCRUD操作


024.チェーンテーブルの作成とチェーンテーブル遍歴のアルゴリズムのデモ
<span style="font-size:14px;">#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Node
{
	int data;
	struct Node *pNext;
}NODE, *PNODE; //NODE    struct Node, PNODE    struct Node *

//    
PNODE create_list(void);
void traverse_list(PNODE pHead);
bool is_empty(PNODE pHead);
int length_list(PNODE pHead);
bool insert_list(PNODE, int, int);
bool delete_list(PNODE, int, int *);
void sort_list(PNODE);

int main(void)
{
	PNODE pHead = NULL;//   struct Node *pHead = null;
	int val;

	pHead = create_list();
	traverse_list(pHead);

	insert_list(pHead, 2, 33);
	traverse_list(pHead);

	
	if(delete_list(pHead, 4, &val))
	{
		printf("    ,       :%d
", val); } else{ printf(" ! !
"); } traverse_list(pHead); int len = length_list(pHead); printf(" %d
", len); return 0; } // PNODE create_list(void) { int len; // int i; int val; // // PNODE pHead = (PNODE)malloc(sizeof(NODE)); if(NULL == pHead) { printf(" , !
"); exit(-1); } PNODE pTail = pHead; pTail->pNext = NULL; printf(" :len = "); scanf("%d", &len); for(i=0; i<len; ++i) { printf(" %d :", i+1); scanf("%d", &val); PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL == pNew) { printf(" , !
"); exit(-1); } pNew->data = val; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } return pHead; } // void traverse_list(PNODE pHead) { PNODE p = pHead->pNext; while(NULL != p) { printf("%d ", p->data); p = p->pNext; } printf("
"); return; } bool is_empty(PNODE pHead) { if(NULL == pHead->pNext) return true; else return false; } // int length_list(PNODE pHead) { PNODE p = pHead->pNext; int len = 0; while(NULL != p) { ++len; p = p->pNext; } return len; } // void sort_list(PNODE pHead) { int i, j, t; int len = length_list(pHead); PNODE p, q; for(i=0,p=pHead->pNext; i<len-1; ++i,p=p->pNext) { for(j=i+1,q=p->pNext; j<len; ++j,q=q->pNext) { if(p->data > q->data) { t = p->data; p->data = q->data; q->data = t; } } } return; } // pHead pos , val, // pos 1 bool insert_list(PNODE pHead, int pos, int val) { int i = 0; PNODE p = pHead; while(NULL != p && i<pos-1) { p = p->pNext; ++i; } if(i>pos-1 || NULL==p) return false; PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL == pNew) { printf(" !
"); exit(-1); } pNew->data = val; PNODE q = p->pNext; p->pNext = pNew; pNew->pNext = q; } // bool delete_list(PNODE pHead, int pos, int *pVal) { int i = 0; PNODE p = pHead; while(NULL != p && i<pos-1) { p = p->pNext; ++i; } if(i>pos-1 || NULL==p) return false; PNODE q = p->pNext; *pVal = q->data; // p p->pNext = p->pNext->pNext; free(q); q = NULL; }</span>

アルゴリズム:
狭義のアルゴリズムはデータの格納方式と密接に関連している
広義のアルゴリズムはデータの記憶方式と光がない.
汎用:
ある技術を用いて達成される効果は,異なるメモリ方式で実行される操作が同じである.
外部の操作は同じで、実は内部の実現は違います.
 
連続記憶【配列】
利点:ストレージ速度が速い
欠点:削除要素の挿入が遅く、スペースが限られていることが多い
離散ストレージ【チェーンテーブル】
利点:スペースに制限はありません.挿入、要素の削除が速いです.
欠点:ストレージの速度が遅い.