單向不帶頭結點不帶環的鍊錶實現

2021-08-17 13:56:54 字數 3326 閱讀 2365

鍊錶有很多種類,單向,雙向,不帶頭,帶頭,不帶環,帶環,結合起來一共可以有八種鍊錶形式;

今天我們來實現一種名字叫 單向不帶頭不帶環的鍊錶

下面就是每一部分的**實現

首先我們要做的就是函式的宣告,結構體的定義,標頭檔案的引用

#pragma once

#define header printf("\n----------%s------------\n",__function__)

#include

#include

#include

typedef char linktype;

typedef struct linklist

linklist;

linklist *head;

void linklist_init(linklist **head);

linklist *creat(linktype value);

void linklist_print(linklist *head);

void linklist_pushback(linklist **head,linktype value);

void linklist_popback(linklist **head);

void linklist_pushfront(linklist **head,linktype value);

void linklist_popfront(linklist **head);

linklist *linklist_find(linklist *head,linktype value);

void linklist_pushhighleft(linklist **head,linklist *pos,linktype value);

void linklist_pushhighright(linklist **head,linklist *pos,linktype value);

void linklist_pop1(linklist **head,linklist *pos);

void linklist_pop2(linklist **head,linktype value);

void linklist_pop2plus(linklist **head,linktype value);

void linklist_nizhi(linklist *head);

接下來我們就要一步一步實現我們的功能

首先我們要初始化我們的鍊錶;

鍊錶的初始化

void linklist_init(linklist **head)

else

}

鍊錶列印**的實現

void linklist_print(linklist *head)

else

printf("\n");

}}

下來我們還要實現我們的建立函式的**

linklist *creat(linktype value)

else

}

好,我們準備工作都做好了,現在我們就要實現它的一些功能了

void linklist_pushback(linklist **head,linktype value)

if(*head==null)

else

cur=creat(value);

}}

void linklist_popback(linklist **head)

if(*head==

null)

else

free(cur->next);

cur->next=

null;

}}

void linklist_pushfront(linklist **head,linktype value)

if(*head==null)

else

}

void linklist_popfront(linklist **head)

if(*head==

null)

eles

}

linklist * linklist_find(linklist *head,linktype value)

else

else

}printf("沒找到\n");

return ;

}}

void linklist_pushhighleft(linklist **head,linklist *pos,linktype value)

if(*head==null)

else

linklist *newnode=creat(value);

newnode->next=pos;

cur->next=newnode;

}}

void linklist_pushhighright(linklist **head,linklist *pos,linktype value)

if(*head==null)

else

}

void linklist_pop1(linklist **head,linklist *pos)

if(*head==null)

if(*head==pos)

else

cur->next=pos->next;

free(pos);

pos=null;

}}

void linklist_pop2(linklist **head,linktype value)

if(*head==null)

else

}

void linklist_pop2plus(linklist **head,linktype value)

if(*head==

null)

else

linklist *p=cur;

cur=p->next;

linklist_pop1(head,p);}}

}

void linklist_nizhi(linklist *head)

else

}

以上就是鍊錶的一些功能的實現,相互學習,如果有錯誤,請指正

不帶頭結點的雙向迴圈鍊錶

基本概念 迴圈鍊錶 將單鏈表中最後乙個結點的next指向頭結點或者空指標,就使得整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶。雙向鍊錶 是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域prior,在雙向鍊錶的結點中有兩個指標域,乙個next指向直接後繼,乙個prio...

不帶頭結點的單迴圈鍊錶

建立標頭檔案nlist.h pragma once 不帶頭節點的鍊錶,主要應用在迴圈鍊錶中,其缺點,操作複雜 會出現二級指標 優點 靈活 頭指標指向哪個節點哪個節點就是第乙個節點 不帶頭節點的單鏈迴圈鍊錶,尾節點的next指向第乙個節點 typedef struct nnode nnode,pnli...

不帶頭節點鍊錶

在本人之前的博文 帶頭節點的鍊錶 宿舍管理系統 中,本人介紹了鍊錶的基本知識點。那麼,在本人資料結構與演算法的專欄的開始,本人就來介紹下不帶頭節點鍊錶 由於本人在講解帶頭節點鍊錶的時候就已經講解過了鍊錶基本的增 刪 改 查 操作,所以,本人在這裡就不對這些重複的知識點進行講解了。本人在本篇博文中主要...