主要是給自己以後複習知識,還有進行修改優化用的:
歡迎批評,其中鍊錶合併的就地合併我並未掌握,我用了新的頭結點以後要補上
首先是標頭檔案定義
#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...