資料結構與演算法小記(C)

2021-10-05 15:37:55 字數 2704 閱讀 9092

@線性表小記

例:

#define maxsize 20

typedef int elemtype;

typedef struct

sqlist;

查:

**:

#define ok 1

#define error 0

#define ture 1

#define false 0

typedef int status;

status getelem(sqlist l,int i,elemtype *e)

增:

演算法思路:

*如果插入位置不合理,丟擲異常;

*如果線性表長度大於等於陣列長度,則丟擲異常或動態增加容量;

*從最後乙個元素開始向前遍歷到底i個位置,分別將他們都向後移動乙個位置;

*將要插入元素填入位置i處;

*表長加1;

**:

status listinsert(sqlist *l,int i,elemtype e)

l->data[i-1] = e;

l->length++;

return ok;

}

刪:

演算法思路:

*如果插入位置不合理,丟擲異常;

*去除刪除元素;

*從刪除元素位置開始遍歷到最後元素位置,分別將他們都向前移動乙個位置;

*表廠減1;

**:

status listdelete(sqlist *l,int i,elemtype *e)

l->length--;

return ok;

}

單鏈表分為資料域和指標域;

**:

//單鏈表儲存結構

typedef struct node

node;

typedef struct node *linklist; //定義linklist

查:

演算法思路:

*宣告乙個結點p只想鍊錶第乙個結點,初始化j從1開始;

*當j**:

status getelem(linklist l,int i,elemtype *e)

if(!p || j>i) //第i個元素不存在

return error;

*e = p->data; //取第i個元素的資料

return ok;

}

增:

演算法思路:

*宣告乙個結點p指向鍊錶第乙個結點,初始化j從1開始;

*當jdata;

*單鏈表的插入標準語句s->next = p->next; p->next = s;

*返回成功;

**:

status listinsert(linklist *l,int i,elemtype e)

if(!p||j>i)

return error; //第i個元素不存在

s = (linklist)malloc(sizeof(node)); //生成新結點

s->data = e;

s->next = p->next; //將p的後繼結點賦值給s的後繼

p->next = s; //將s賦值給p的後繼

return ok;

}

刪:

演算法思路:

*宣告一結點p指向鍊錶第乙個結點,初始化j從1開始;

*當j next賦值給q;

*單鏈表的刪除標準語句p->next = q->next;

*將q結點中的資料賦值給e,作為返回;

*釋放q結點;

*返回成功;

**:

status listdelete(linklist *l,int i,elemtype *e)

if(!(p->next)||j>i)

q = p->next;

p->next = q->next; //將q的後繼賦值給p的後繼

*e = q->data; //將q的結點資料給e

free(q); //讓系統**此結點,釋放記憶體

return ok;

}

用陣列代替指標來描述單鏈表,主要是沒有指標的高階語言用來實現單鏈表,應用的可能性不高,但是設計很巧妙。
演算法思路:

我們讓陣列的元素都是由兩個資料域組成,data和cur。陣列的每乙個下表都對應乙個data和乙個cur。資料域data,用來存放資料元素,我們平時要處理的資料;

而游標cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標。

儲存結構:

#define maxsize 1000	//假設鍊錶的最大長度時1000

typedef structcomponent,staticlinklist[maxsize];

儲存結構:

typedef struct dulnode

dulnode,*dulinklist;

雙鏈表也可以是迴圈鍊錶

將單鏈表中終端結點的針織端由空指標指向頭結點,就是整個單鏈表形成乙個換,這種頭尾相接的單鏈表成為單迴圈鍊錶,簡稱迴圈鍊錶。迴圈鍊錶解決了從當中任意結點出發方文所有鍊錶的結點。

資料結構小記

資料結構是 計算機儲存 組織 資料的方式。資料結構是指相互之間存在一種或多種特定關係的 資料元素 的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存 效率。首先,計算機儲存 組織資料的方式。我們所接觸的到簡單的list arraylist map hashmap都是資料結構,因為他們可...

資料結構與演算法 資料結構C 堆

資料結構c 堆 如果有乙個關鍵碼的集合k 把它的所有元素按完全二叉樹的順序儲存方式儲存在乙個一維陣列中,並滿足 ki k2 i 1 且 ki k2 i 2 ki k2 i 1 且 ki k2 i 2 i 0,1,2 則稱為小堆 或大堆 小堆 大堆 中 任一結點的關鍵碼均小於 大於 等於它的左右孩子的...

資料結構學習小記 其它演算法

hash,一般翻譯做雜湊 雜湊,或音譯為雜湊,是乙個典型的利用空間換取時間的演算法,把任意長度的輸入 又叫做預對映pre image 通過雜湊演算法變換成固定長度的輸出,該輸出就是雜湊值。如有乙個學生資訊表 學生的學號為 年紀 學院號 班級號 順序排序號 如 19 年級 002 2號學院 01 一班...