/*
鍊錶與順序表的區別?
鍊錶--單鏈表還是雙鏈表?
鍊錶是否帶頭結點?
常規操作: 注意各個操作都有帶頭結點和不帶頭結點的兩個型別
initlist(linklist &l)初始化乙個單鏈表--
listinsert(linklist &l,int i,elemtype e)在鍊錶l的第i個位置插入元素e;
insertnextnode(lnode*p,elemtype e)在p結點後面插入元素e
insertpirornode(lnode*p,elemtype e)在p結點前面插入元素e
listdelete(linklist &l,int i,elemtype &e)刪除i處的元素e
deletenode(lnode *p) 刪除指定元素的結點---不能是最後乙個結點
*/#include#includetypedef int elemtype;
typedef struct lnode
lnode,*linklist;
//什麼時候用lnode* 什麼時候用linklist ----linklist強調這是乙個單鏈表 lnode* 強調這是乙個節點
//初始化乙個單鏈表
//不帶頭結點的情況
bool initlist(linklist &l)
//帶頭結點的情況
bool initlist(linklist &l)
//插入操作,在表l中的第i個位置上插入指定元素e。
//帶頭結點 --有乙個問題就是 沒有判斷輸入的有效性,這個因為前面struct中沒有設定,要在這個函式外面進行判斷
bool listinsert(linklist &l,int i,elemtype e)
//迴圈找到第i-1個結點
if(p==null)
return false;
lnode *s=(lnode*)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}//不帶頭結點的插入
bool listinsert(linklist &l,int i,elemtype e)
lnode *p;
int j=1;
p=l;
while (p!=null&&jnext;
j++;
}if(p==null)return false;
lnode *s=(lnode*)malloc(sizeof(lnode));
if(s==null)return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}//在p結點後面插入元素e,,前面的在i處插入元素e的函式可以呼叫此函式
bool insertnextnode(lnode*p,elemtype e)
//在p結點之前插入元素e---注意看思路。!!!!
bool insertpriornode (lnode *p,elemtype e)
//刪除在i處的元素,並返回元素e
bool listdelete(linklist &l,int i,elemtype &e)
if(p==null)return false;
lnode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}//演算法時間複雜度o(n);
//刪除指定結點p
bool deletenode(lnode *p)
int main()
資料結構 鍊錶
鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...
資料結構 鍊錶
鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...
資料結構 鍊錶
一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...