資料結構 線性表(鏈式儲存)

2021-07-25 05:34:43 字數 3994 閱讀 9077

1、 順序表:

①需要一片連續的記憶體空間,成員可以隨機訪問,訪問效率高

②插入刪除資料存在資料搬移的現象,效率低

③儲存密度高

鍊錶的特點:

①不需要連續的記憶體空間,不能隨機訪問元素,訪問效率低

②插入刪除資料不存在資料搬移的現象,效率高

③儲存密度比較低

2、無頭鍊錶:第乙個節點為資料節點,加入刪除第乙個節點,鍊錶的入口發生改變,操作維護比較複雜

有頭鍊錶:浪費第乙個節點作為頭節點,作為操作維護鍊錶的同一入口,操作維護鍊錶比較簡單

有頭鍊錶用的比較多

3、鍊錶節點如何定義:

struct link

4、鍊錶的插入

5、鍊錶的刪除

迴圈鍊錶

6、雙向鍊錶的定義:

7、插入

8、刪除

**實現鍊錶的建立、銷毀、插入、刪除、更新、遍歷輸出

*/#include#include#include#include"link.h"

/***建立煉表頭節點

*/link* createlink()

memset(phead,0,sizeof(link));

return phead;}/*

**銷毀

*/int destroylink(link *phead)

link *pdel = null;

link *ptmp = null;

pdel= phead->pnext;

while(null != pdel)

free(phead);

phead = null;

pdel = null;

ptmp = null;

return link_ok;}/*

**建立乙個鍊錶節點

*/link* createnode( data_t tdata )

memset(pnode,0,sizeof(link));

pnode->data = tdata;

return pnode;}/*

**首部插入乙個鍊錶的元素

*/int insertlinkitem(link *phead,data_t idata,int offset)

link *pn = createnode(idata);

link *ptmp = phead;

switch ( offset )

}pn->pnext = ptmp->pnext;

ptmp->pnext = pn;

}return link_ok;}/*

**鍊錶的首部刪除乙個元素

*/int dellinkitem(link *phead,data_t *pdata,int offset)

link *pt = phead->pnext;

link *ptmp = phead;

link *pdel = null;

switch ( offset )

}pdel = ptmp->pnext;

*pdata = pdel->data;

ptmp->pnext = pdel->pnext;

free(pdel);

pdel = null;

}return link_ok;}/*

**更新鍊錶中的資料元素

*/int updatelink(link *phead,data_t olddata,data_t newdata)

link *ptmp = phead->pnext;

while ( null != ptmp)

ptmp = ptmp->pnext;

}return link_ok;}/*

**遍歷鍊錶輸出鍊錶元素的值

*/void showlink(link *phead)

link *ptmp = phead->pnext;

while ( null != ptmp)

printf("\n");

}link.h

#ifndef _link_h_

#define _link_h_

typedef int data_t;

typedef struct link

link;

typedef enum link_op

link_op_enum;

link* createlink();

int destroylink(link *phead);

int insertlinkitem(link *phead,data_t idata,int offset);

int dellinkitem(link *phead,data_t *pdata,int offset);

int updatelink(link *phead,data_t olddata,data_t newdata);

void showlink(link *phead);

#endif /* _link_h_ */

main.c

#include#include#include#include"link.h"

int main()

int i = 0;

int ret = -1;

for ( i = 0 ; i < 10 ; i++ )

}showlink(ph);

ret = insertlinkitem(ph, 88,5);

showlink(ph);

ret = insertlinkitem(ph, 99,20);

showlink(ph);

int num = -1;

ret = dellinkitem(ph, &num,0);

showlink(ph);

ret = dellinkitem(ph, &num,3);

showlink(ph);

ret = updatelink(ph, 2, 0);

showlink(ph);

destroylink(ph);

return 0;

}

資料結構 線性表鏈式儲存

對於線性鍊錶,有兩種表示方法,一種是包含頭節點的情況,如下圖 一種是不包含頭節點的情況,如下圖 本文中對線性鍊錶的表示,利用的是帶頭節點的定義方式。使用c 實現了線性鍊錶建立,初始化,刪除,插入,清空,遍歷,有序鍊錶合併等操作。煉表頭 頭指標 頭結點 煉表頭 指的是線性表第乙個元素所在結點 頭指標 ...

資料結構 線性表鏈式儲存結構

鏈式儲存 用一組任意的儲存單元儲存線性表中的資料元素。用這種方法儲存的線性表簡稱線性鍊錶。儲存鍊錶中結點的一組任意的儲存單元可以是連續的,也可以是不連續的,甚至是零散分布在記憶體中的任意位置上的。鍊錶中結點的邏輯順序和物理順序不一定相同。即不要求邏輯上相鄰的元素在物理位置上也相鄰 為了正確表示結點間...

資料結構 線性表(鏈式儲存結構)

用一組任意的儲存單元儲存線性表的資料結構,這組儲存單元可以是連續的,也可以是不連續的。對資料結構ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其後繼的資訊 即直接後繼的儲存位置 資料域 儲存資料元素資訊的域。指標域 儲存直接後繼位置的域。資料域 指標域 結點 n個結點鏈結成乙個鍊錶,即為線性表...