本文主要介紹了單鏈表的初始化/頭插/頭刪/尾插/尾刪/查詢/指定位刪除/指定數刪除/指定位插入/銷毀/排序等.
標頭檔案
#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...