鍊錶的建立

2021-10-02 03:00:30 字數 2905 閱讀 9017

【動態鍊錶】

1.建立鍊錶

動態鍊錶使用new delete需要新增標頭檔案stdlib.h同時我們需要注意的是這裡配合使用了指向前驅結點的指標pre和指向當前結點的p。通過資料域與指標域進行建立新結點。需要注意的是頭結點head的資料域是不儲存資料的。以下是基本的動態鍊錶的**:

#include#includestruct node ;

//建立鍊錶

node* create(int array)

return head; //返回頭結點指標

} int main() ;

node* l = create(array); //新建鍊錶,返回的頭指標head賦值給l

l = l->next; //從第乙個結點開始有資料域

while(l != null)

return 0;

}

輸出結果:

53612
2.查詢元素

已經有乙個鍊錶,如何查詢其中是否有給定的元素。要從第乙個結點開始直到查詢到數字就計數。

int search(node* head, int x)  

p = p->next;

} return count;

}

3.插入元素

插入元素要注意的是一定是插入的元素先輸入資料指向前驅結點的下一結點後再進行前驅結點指向新插入的結點,不可以顛倒順序否則會丟失鍊錶段。

void insert(node* head, int pos, int x) 

node* q = new node; //新建結點

q->data = x; //新建結點的資料域為x

q->next = p->next; //新建結點的下乙個結點為p的下乙個結點

p->next = q; //將前乙個結點指向新結點

}

4.刪除結點

刪除元素是刪除鍊錶上所有值為給定的x,例如鍊錶為53612我需要刪除6就使得鍊錶變為5312.

刪除操作是這樣的進行的:

void del(node* head, int x)  else 

} }

以上的**組合起來栗子如下:

#include#includestruct node ;

//建立鍊錶

node* create(int array)

return head; //返回頭結點指標

} int search(node* head, int x)

p = p->next;

} return count;

}void insert(node* head, int pos, int x)

node* q = new node; //新建結點

q->data = x; //新建結點的資料域為x

q->next = p->next; //新建結點的下乙個結點為p的下乙個結點

p->next = q; //將前乙個結點指向新結點

}void del(node* head, int x) else

} }int main() ;

//建立動態鍊錶

node* l = create(array); //新建鍊錶,返回的頭指標head賦值給l

node* head;

head = l;

l = l->next; //從第乙個結點開始有資料域

while(l != null)

//查詢操作

l = head;

printf("\n%d", search(l, 3));

//插入操作

l = head;

insert(l, 3, 1);

printf("\n");

l = head->next;

while(l != null)

//刪除操作

printf("\n");

l = head;

del(l, 1);

l = head->next;

while(l != null)

return 0;

}

輸出結果:

53612

1531612

5362

【靜態鍊錶】

動態鍊錶是需要指標建立結點與結點之間的聯絡。對於一些問題結點的位址是比較小的整數的時候(比如5位數字的位址),就沒有必要去建立動態鍊錶,而應該使用方便很多的靜態鍊錶。

struct node node[size];
在此處的定義,next為乙個int型的整數,用於存放下一結點的位址(事實上是陣列的下標)。例如,如果初始結點的位址為11111,第二個結點的位址為22222,第三個結點的位址為33333,且第三個結點為鍊錶的末尾,那麼整個靜態鍊錶可以通過以下的方式連線起來:

node[11111] = 22222;

node[22222] = 33333;

noed[33333] = -1; //-1對應動態鍊錶中的null,表示沒有後繼結點

靜態鍊錶中還需要注意一點,我們需要把結構體型別名稱與結構體變數的名稱設定為不同的名字(即node和node),事實上在一般情況下他們是可以相同的,但是由於靜態鍊錶是由陣列實現的,那麼就有可能需要對其進行排序,這個時候如果結構體型別名和結構體變數名相同,sort函式就會報編譯出錯。因此在使用靜態鍊錶的時候,盡量不要把結構體的型別名和結構體變數名稱取為同樣的名字。

鍊錶(鍊錶建立)

先找到了一些與單鏈表相關的概念 2.指標域 ai元素儲存指向後繼元素儲存位置的資訊 3.結點 包含資料域和指標域 4.單鏈表 每個結點只包含乙個指標域的線性表 5.頭指標 要素 鍊錶中第乙個結點的儲存位置 線性表最後乙個結點指標為空 6.頭結點 非要素 單鏈表第乙個結點前附設乙個結點 其指標域指向第...

鍊錶的建立

上學期c 老師教鍊表的時候沒有認真聽,這學期要補回來。今天就先來寫一寫鍊錶的建立的基本的 輸入輸出的。正序輸入輸出 include include struct node struct node creat int n 鍊錶的錄入 return head void show struct node ...

鍊錶的建立

鍊錶的建立分為頭插法和尾插法 頭插法 1 含頭結點 include sstruct node typedef struct node linknode typedef linknode linklist linklist creatlink return head 2 不含頭結點 linklist ...