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個結點鏈結成乙個鍊錶,即為線性表...