資料結構 單鏈表相關知識

2021-09-20 04:07:51 字數 1640 閱讀 4364

1、建立乙個單鏈表

實現思路:首先,定義乙個頭結點(*l),為其在記憶體中開闢一段空間並將指標域指標指向null;其次,生成乙個新結點p,將要插入的資料元素儲存到結點的資料域,並將其指標域指標指向頭結點(*l)指向的結點(或null);最後,將新結點p插入到表頭。

/***

隨機產生n個元素的值,建立帶頭結點的單鏈線性表l(頭插法)***/

//單鏈表節點的定義

typedef structnode;

//由乙個陣列建立單鏈表

node* createlist(int *a, int count)

return head; //返回鍊錶

}

2、單鏈表插入

實現思路:首先,對鍊錶進行查詢操作,找到第i個位置;其次,為新插入的結點s在記憶體中開闢一段儲存空間並將插入的元素儲存到新結點s的資料域中;最後,將p指向的結點位置賦值給新結點s的指標域,再將新結點s的儲存位址賦值給工作指標。

/*功能:將元素e插入到單鏈表的第i個位置*/

#define unsuccess -1

#define success 1

typedef status int;

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

if(!p || j>i) //當p指向null或者j大於要查詢的位置時,查詢失敗

return unsuccess ;

s=(linklist)malloc(sizeof(node)); //生成新結點,即為新結點開闢一段記憶體

s->data=e; //查詢成功,將資料元素e賦值給s結點的資料域

p->next=s; //設定結點p的後繼結點為結點s

return success ;

}

3、單鏈表刪除操作

實現思想:首先,宣告乙個結點q並對鍊錶進行查詢操作,找到第i個位置;其次,將第i個結點賦值給q;第三,將q的後繼(以前的p的後繼)賦值為工作指標p的後繼;最後,將第i個結點(q)資料域資料儲存到指標變數e中,free(q)即釋放結點q占用的記憶體空間

/***功能:刪除單鏈表l中的第i個資料元素(結點)

並將該資料元素儲存到指標變數e指向的儲存空間中***/

#define unsuccess -1

#define success 1

typedef status int;

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

if(!p || j>i)

return unsuccess;

q=p->next; //設定q為p的後繼結點,即將第i個結點的位址儲存到q

p->next=q->next; //將q的後繼結點設定為p的後繼結點

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

free(q); //設定完成後,讓系統**此結點,釋放記憶體

return success;

}

資料結構 單鏈表相關習題3

解題思路 兩煉表若相交,則其最後乙個節點必定相同。所以遍歷得出兩鍊錶的尾節點可得知兩鍊錶是否相交。若兩鍊錶相交,則求出兩鍊錶長度,相減得其差值len。較長鍊錶先向後遍歷len次,隨後兩鍊錶同時向後遍歷。直到出現兩值相同時,該節點即為相交點。判定兩個鍊錶是否相交,並求出交點 linknode hasc...

Go語言 資料結構 單鏈表相關操作

一般來說,為了比較好的對單鏈表進行增刪該查操作,會設定乙個頭節點來標識煉表頭,這個節點本身不存放資料。如下 package main import fmt 定義乙個heronode type heronode struct 給鍊錶插入乙個結點,在單鏈表的最後加入 func insertheronod...

單鏈表相關知識以及指標引用相關知識

include include typedef char elemtype typedef struct lnode linknode 宣告單鏈表節點型別 頭插法相對簡便,但插入的資料與插入的順序相反 尾插法操作相對複雜,但插入的資料與插入順序相同。頭插法建立鍊錶時候,就相當於後來居上。後面的結點不...