單鏈表的一些基本操作

2021-07-13 02:42:57 字數 3740 閱讀 9023

本文主要介紹了單鏈表的初始化/頭插/頭刪/尾插/尾刪/查詢/指定位刪除/指定數刪除/指定位插入/銷毀/排序等.

標頭檔案

#ifndef __linklist_h__

#define __linklist_h__

#include#include#includetypedef int datatype;

typedef struct linknode

linknode,*plinknode;

typedef struct linklist

linklist,*plinklist;

void printlist(plinklist plist);//列印函式

void initlinklist(plinklist plist);//初始化函式

void pushback(plinklist plist,datatype x);//尾插

void popback(plinklist plist);//尾刪

void pushfront(plinklist plist,datatype x);//頭插

void popfront(plinklist plist);//頭刪

plinknode find(plinklist plist,datatype x);

void insert(plinklist plist,plinknode pos,datatype x);//指定為插入

void remove(plinklist plist,datatype x);//指定數刪除

void removeall(plinklist plist,datatype x);//刪除所有

void bubblesort(plinklist plist);//排序

void erase(plinklist plist,plinknode pos);//指定位刪除

void destroy(plinklist plist);//銷毀

#endif //__linklist_h__

函式部分

#include"linklist.h"

void printlist(plinklist plist)//列印函式

printf("null\n");

}void initlinklist(plinklist plist)//初始化函式

//cur->next=null;

plist->phead=null;

}void pushback(plinklist plist,datatype x)//尾插

cur=plist->phead;

newnode->data=x;

newnode->next=null;

if(cur==null)

while(cur)

pre->next=newnode;

}void popback(plinklist plist)//尾刪

//pre->next=null;

//free(pre);

//assert(plist);

plinknode cur=null;

plinknode pre=null;

cur = plist->phead;

if(plist->phead==null)

else if(cur->next==null)

else

free(cur);

cur=null;

pre->next=null;}}

void pushfront(plinklist plist,datatype x)//頭插

void popfront(plinklist plist)//頭刪

plinknode find(plinklist plist,datatype x)

return cur;

}void insert(plinklist plist,plinknode pos,datatype x)//指定位插入

if(pos==null)

newnode->next=pos->next;

pos->next=newnode;

tmp=pos->data;

pos->data=newnode->data;

newnode->data=tmp;

}void remove(plinklist plist,datatype x)//指定數刪除

cur=cur->next;

}return;

}void removeall(plinklist plist,datatype x)//刪除所有

else if(cur->next==null)

else

}else }}

void bubblesort(plinklist plist)//排序 }}

}void erase(plinklist plist,plinknode pos)//指定位刪除

while(pos!=cur)

pre->next=pos->next;

free(pos);

pos=null;

}void destroy(plinklist plist)//銷毀

plist->phead=null;

測試部分

#include"linklist.h"

void test()

; initlinklist(&list);

pushback(&list,1);

pushback(&list,2);

pushback(&list,3);

pushback(&list,4);

pushback(&list,5);

pushback(&list,6);

printlist(&list);

pushback(&list,8);

printlist(&list);

popback(&list);

popback(&list);

printlist(&list);

pushfront(&list,9);

pushfront(&list,10);

pushfront(&list,11);

printlist(&list);

popfront(&list);

printlist(&list);

find(&list,9);

insert(&list,find(&list,2),12);

printlist(&list);

remove(&list,4);

printlist(&list);

pushback(&list,3);

pushback(&list,3);

pushback(&list,3);

pushback(&list,3);

printlist(&list);

removeall(&list,3);

printlist(&list);

bubblesort(&list);

printlist(&list);

erase(&list,find(&list,2));

printlist(&list);

destroy(&list);

printlist(&list);

}int main()

最近有點懶,就不多說了

單鏈表的一些操作

1 有頭結點方便對首元資料元素的刪除,插入操作。不帶頭結點要判斷是不是作用在首元,是就得改變頭指標指向。2 頭結點資料域可以存表長。head data k 1 取倒數第k個元素。兩遍。走一遍,定義兩個指標,先走乙個,使兩個之間相差k個位置,再一起移動,走得快的的走到空了,走得慢的的資料域就是指定元素...

無頭單鏈表的一些基本操作

實現以下功能 plist plistinit plist phead 初始化 void plistpushback plist phead,datatype data 尾插 plist pbuynewnode datatype data 建立乙個新節點 void plistshow plist ph...

單鏈表的一些基本操作(自我總結)

鍊錶可分為兩種 1.無頭結點定義 2.有頭節點定義 無頭結點定義的鍊錶 它的第乙個節點就開始儲存資料,這樣在進行後續某些操作時會造成一些不方便的地方。這是我從啊哈演算法中看到的版本,沒有分開函式去創立鍊錶 include using namespace std struct node int mai...