C語言實現無頭鍊錶的基本操作

2021-07-02 23:04:48 字數 2902 閱讀 2372

記錄下學習過程,方便以後檢視。

直接上**:

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 的基礎,將元素...