記錄下學習過程,方便以後檢視。
直接上**:
linklist.h
#ifndef _linklist_h_
#define _linklist_h_
#include
#include
#include
typedef int elemtype;
typedef struct _linklistlinknode;
typedef linknode * linklist;
//初始化鍊錶
void initlist(linklist *list);
//有序單鏈表中插入結點,保持列表有序
bool insert(linklist *list,elemtype elem);
//刪除指定的元素
bool del(linklist *list,elemtype elem);
//建立單鏈表
bool creatlinklist(linklist *list, int n);
//歸併鍊錶
void mergelist(linklist *la,linklist *lb,linklist *lc);
#endif
linklist.c
#include
#include "linklist.h"
void initlist(linklist *list)
bool insert(linklist *list,elemtype elem)
//2.初始化新節點的元素及指標
pnode->elem = elem;
pnode->next = null;
//3.使用p指標遍歷鍊錶,從表頭開始查詢
p = *list;
//4. 查詢鍊錶,找到插入的位置
//1)鍊錶為空
if(null == *list)
//2)插入的節點最小,插入到鍊錶首
if(elem < p->elem)
else //3)插入鍊錶中間或最後
else
}//插入鍊錶末尾
if(p->next == null)
}return true;
}bool del(linklist *list,elemtype elem)
if(current->elem == elem)//刪除首節點
else
else
}if((current->next == null)&&(current->elem != elem))
else
*///方式2 刪除重複結點
current =current->next;
while(current != null)
else}}
return true;
}bool creatlinklist(linklist *plist, int n)
head->elem = n;
head->next = null;
*list = head;
*///判斷n值
if(n<=0)
for(index =0;index
}return true;
}#if 0
void mergelist(linklist *la,linklist *lb,linklist *lc)
if(indexa->elem <= indexb->elem)
else
}while(indexa !=null)
while(indexb !=null)
}#else
void mergelist(linklist *la,linklist *lb,linklist *lc)
else
return;
}else //如果鍊錶a和鍊錶b都不為空,先確定lc的煉表頭
else
}indexc = *lc;
while((indexa != null )&&(indexb != null))
else
}indexc->next = indexa?indexa:indexb;
}#endif
main.c 測試程式
#include
#include "linklist.h"
static printlist(linklist list);
int main(void)
//列印鍊錶
puts("lista is:");
printlist(list);
//建立鍊錶
if(!creatlinklist(&listb, num))
//列印鍊錶b
puts("listb is:");
printlist(listb);
puts("merge list a and b :");
mergelist(&list,&listb,&listc);
printlist(listc);
//刪除結點
puts("please enter the elem you want to delete:");
while(scanf("%d",&elem)==1)
puts("after delete,list is:");
printlist(listc);
puts("please enter the elem you want to delete:");
}return 0;
}static printlist(linklist list)
pnode = list;
while(pnode != null)
pnode = pnode->next;
}puts(" ");
}
C語言實現鍊錶基本操作
之前說過順序表的基本操作。顯然,順序表有乙個很大的缺點,就是做插入刪除操作的時候,往往要做很大量的元素移動的操作。這裡我們討論另外一種線性表的表示方法 鏈式儲存結構。由於它不需要邏輯上的相鄰的元素在物理位置上也相鄰,因此它沒有順序儲存結構所具有的弱點,但是同時也失去了順序表的可隨機訪問的有點。inc...
鍊錶的基本操作(C語言實現
鍊錶的基本操作 c語言實現 include include define ok 1 define error 0 typedef int elemtype typedef int status typedef struct lnodelnode,linklist status initlist l ...
2 8靜態鍊錶基本操作(C語言實現)
上節,我們初步建立了乙個靜態鍊錶 本節學習有關靜態鍊錶 的一些基本操作,包括對錶中資料元素的新增 刪除 查詢和更改。本節是建立在已能成功建立靜態鍊錶的基礎上,因此我們繼續使用上節中已建立好的靜態鍊錶學習本節內容,建立好的靜態鍊錶如圖 1 所示 圖 1 建立好的靜態鍊錶 例如,在圖 1 的基礎,將元素...