鍊錶操作集合 C語言

2021-06-22 11:53:26 字數 4261 閱讀 2859

主要是給自己以後複習知識,還有進行修改優化用的:

歡迎批評,其中鍊錶合併的就地合併我並未掌握,我用了新的頭結點以後要補上

首先是標頭檔案定義

#ifndef andrew

#define andrew

#include #include #include #include #include #define size 10

struct lnode;

typedef int elemtype;

typedef struct lnode

lnode,*linklist; //乙個普通型別 乙個指標型別

void create_and_insert1(linklist *plist);//不帶頭的尾插

void create_and_insert2(linklist *head); //不帶頭的頭插

void create_and_insert_sort(); //不帶頭的順序插

void showlinklist(lnode *head); //列印鍊錶

void create_sort_insert(linklist* plist) ;

void shownodelinklist(lnode *head); //列印帶頭結點的鍊錶

linklist makeempty(); //初始化

linklist makelinklistlast(linklist head,int n); //尾插

linklist makelinklistfront(linklist head,int n); //頭插

lnode *islast(lnode *head);

lnode *find(linklist l,elemtype key);

lnode *delete(linklist l,elemtype key); //刪除所有為key的結點

lnode *findprevious(linklist l,elemtype key); //找到key結點的前驅

linklist elemfour(linklist head,int k);

linklist middlenode(linklist head);

linklist nizhilinklist(linklist head); //鍊錶逆置 帶頭結點

linklist sortlinklist(linklist head); //**************************************

linklist deleteallelement(linklist head);

#endif

#include "superman.h"

//無頭結點尾插

void create_and_insert1(linklist *plist)

else

}}

//無頭結點頭插

void create_and_insert2(linklist *head) //我理解head是乙個指向結構體的指標

else

}}

//順序插入

void create_and_insert_sort(linklist *head) //用兩個指標 乙個標記前驅

else

else

break;

}if(pre==null) // 判斷是否在首部插入。插入首部之前

else

}}}

//列印鍊錶

void showlinklist(lnode *head)

printf("\n");

}

//列印帶頭結點的

void shownodelinklist(lnode *head)

printf("\n");

}

linklist makeempty()

head->data=size;

head->next=null;

return head;

}

//帶頭結點的尾插法 

linklist makelinklistlast(linklist head,int n) //沒有返回值的時候 應該用兩個解引用

last->next=null;

return head;

}

//帶頭結點頭插法

linklist makelinklistfront(linklist head,int n)

return head;

}

//返回最後乙個結點

lnode *islast(lnode *head)

return p;

}

//查詢某個節點

lnode *find(linklist l,elemtype key)

return p;

}

//刪除所有值為key的結點

lnode *delete(linklist l,elemtype key)

else

}return l;

}

//尋找前驅

lnode *findprevious(linklist l,elemtype key)

return p;

}

//尋找倒數第k個結點 

linklist elemfour(linklist head,int k)

quick=quick->next;

} while(quick->next!=null)

return slow;

}

//找出單鏈表的中間元素

linklist middlenode(linklist head)

if(i%2==0) }

else

}

//刪除無頭單鏈表的乙個節點q

linklist deletenode(linklist q)

//單鏈表逆置

linklist nizhilinklist(linklist head)

return head;

}

//鍊錶合併(新建乙個頭結點)

linklist mergelinklist(linklist head1,linklist head2)

else

}if(pre1)

else if(pre2)

return head;

}

//判斷單鏈表是否有環?

void circlelinklist(linklist head)

} }

//判斷兩個單鏈表是否相交

void intersectlinklist(linklist head1,linklist head2)

first=head1;

while(second)

second=head2;

if(i>j)

while(first&&first->next!=null)

}} else if(i==j)

}} else

while(first&&first->next!=null)

}} }

//單鏈表排序  插入排序

linklist sortlinklist(linklist head)

else

mark->next=pre->next;

pre->next=mark;

}mark=markbehind;

} return head;//返回新的頭結點

}

鍊錶基本操作集合

的背景是這樣的,乙個鍊錶,裡面存著圖書的資訊,圖書的資訊有書名,作者姓名,出版社,年份,按字典序公升序排列,按書名的關鍵字刪除和查詢書本資訊。typedef struct infobook typedef book bookptr bookptr first null cur,pre,tempptr...

C語言鍊錶綜合操作

預處理命令 include include define len sizeof struct student define format ld,f define p format ld 5.1f n define null 0 構造結構體 struct student 構造乙個結構體型別 int n...

C語言(5) 鍊錶操作

1.顯示鍊錶元素 1 把鍊錶首結點作為當前結點 2 判斷當前結點是否為null,為null則輸出結果 3 輸出當前結點的值 4 把鍊錶的下一結點作為當前結點 5 重複執行步驟 1 3 例.編寫乙個函式,顯示head指向開始結點的鍊錶所有元素。struct snode void write struc...