構建連結串列

该说不唠發表於2024-03-17

連結串列

typedef struct msgdata
{
    char msgtype;
    char text[27];
}link_data;

typedef struct msglist
{
 link_data data;
 struct msglist * next; 
}linknode,*linklist;

建立連結串列思路:

首先建立兩個結點,即頭結點和尾結點;

然後建立一個函式:在函式內建立一個結點,並分配記憶體空間;尾結點指向該結點,該結點的next指向空,並返回該結點的指標。返回的結點即為頭結點

listhead = creatlist();
linklist listhead,listtail;
linklist creatlist(){
 linklist h;
 h=(linklist)(malloc(sizeof(linknode));
 listtail =h;
 h->next=NULL;
 return h;
}

插入結點思路:

建立一個函式,傳入引數為結點的資料,在函式內部建立一個結點並分配記憶體空間,連結串列的最後一位next指向該結點,更新尾指標,

然後為尾結點賦值,並將尾結點的next指向空。成功返回0,失敗返回-1。

int  insertlist(link_data x){
  linklist h=(linklist)(malloc(sizeof(linknode));
  if(h==NULL)
 {
       printf("error");
       return -1;
}
 listtail->next=h;
 listtail=h;
 h->data=x;
 h->next=NULL;
 return 0;
}

判斷結點是否為空的思路:

傳入一個結點,如果該節點的next指向為空則連結串列結束

int emptylist(linklist h){
  return h->next==NULL;}

讀取並刪除一個結點的思路:

該函式的引數為一個頭結點,返回值為提取的結點。首先在函式內部判斷該連結串列是否為空,如為空返回NULL;建立一個結點指向頭結點的下一個結點,即第一個結點,也就是

我們要提取的結點,儲存一下它的地址;然後讓頭結點指向該結點的下一個結點,然後判斷該節點的下一個結點是否為空,如果為空,則提取該結點後,連結串列為空,要讓尾結點

也指向頭結點。最後返回提取的結點。

linklist deletelist(linklist h){
    if(emptylist(h)){
      return NULL;
}
linklist q;
q=h->next;
h->next=q->next;
if(q->next==NULL)
{
    linktail=h;
}
return q;
}

相關文章