如何建立單連結串列我寫的建立單連結串列函式,最後怎麼返回連結串列?

2021-03-07 12:45:20 字數 4594 閱讀 5772

1樓:52茹月

建立單連結串列的常用方法有兩種:頭插法建表、尾插法建表

(1) 頭插法建表

該方法從一個空表開始,讀取陣列a中的字元,生成新結點,將讀取的資料存放到新結點的資料域中,然後將新結點插入到當前連結串列的表頭上,直到結束為止。演算法如下:

}(2) 尾插法建表

頭插法建立連結串列雖然演算法簡單,但生成的連結串列中結點的次序和原陣列元素的順序相反,若希望兩者次序一致,可採用尾插法。該方法是將新結點插到當前連結串列的表尾上,為此必須增加一個尾指標r,使其始終指向當前連結串列的尾結點。演算法如下:

r-> next = null;}

2樓:蒼可彤韻

1,前插法入鏈

//用前插法,逐步建立連結串列(使得結點入鏈)void

enlink1(int

num,int

score,char

name[10])}

3樓:碩鋒枝華容

#include

#include

using

namespace

std;

#define

datatype2

char

typedef

struct

node

linklist;

//尾插法建表

void

createlistr

(linklist

*&l,

datatype2

array)

r->next

=null;

}//頭插法建表

void

createlistf

(linklist

*&l,

datatype2

array)

}int

main();

linklist

*l;createlistr

(l,a);

linklist*p=

l->next;

while

(p!=

null)

cout

<

linklist

*h;createlistf

(h,a);

linklist*q=

h->next;

while

(q!=

null)

cout

<

return0;}

這是兩種不同的建立單連結串列的方法,你執行一下就能看它們之間的區別的了,我是用c++寫的,如果你要用c的話,把標頭檔案和那個輸出語句改一下就行了

4樓:羽強務採南

單連結串列的建立

typedef

struct

nodenode;

node

*create()

p=(node

*)malloc(sizeof(node));

p->data=x;

if(++i==1)

else

q=p;

}q->next=null;

return

head;}

5樓:晧寶是隻小猴子

1、連結儲存方法

連結方式儲存的線性表簡稱為連結串列(linked list)。

連結串列的具體儲存表示為:

① 用一組任意的儲存單元來存放線性表的結點(這組儲存單元既可以是連續的,也可以是不連續的)

② 連結串列中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關係,在儲存每個結點值的同時,還必須儲存指示其後繼結點的地址(或位置)資訊(稱為指標(pointer)或鏈(link))

注意:鏈式儲存是最常用的儲存方式之一,它不僅可用來表示線性表,而且可用來表示各種非線性的資料結構。

2、連結串列的結點結構

┌──┬──┐

|data | next│

└──┴──┘

data域--存放結點值的資料域

next域--存放結點的直接後繼的地址(位置)的指標域(鏈域)

注意:①連結串列通過每個結點的鏈域將線性表的n個結點按其邏輯順序連結在一起的。

②每個結點只有一個鏈域的連結串列稱為單連結串列(single linked list)。

【例】線性表(bat,cat,eat,fat,hat,jat,lat,mat)的單連結串列示如示意圖

3、頭指標head和終端結點指標域的表示

單連結串列中每個結點的儲存地址是存放在其前趨結點next域中,而開始結點無前趨,故應設頭指標head指向開始結點。

注意:連結串列由頭指標唯一確定,單連結串列可以用頭指標的名字來命名。

【例】頭指標名是head的連結串列可稱為表head。

終端結點無後繼,故終端結點的指標域為空,即null。

4、單連結串列的一般圖示法

由於我們常常只注重結點間的邏輯順序,不關心每個結點的實際位置,可以用箭頭來表示鏈域中的指標,線性表(bat,cat,fat,hat,jat,lat,mat)的單連結串列就可以表示為下圖形式。

5、單連結串列型別描述

typedef char datatype; /* 假設結點的資料域型別為字元 */

typedef struct node listnode;

typedef listnode *linklist;

listnode *p;

linklist head;

注意:①linklist和listnode *是不同名字的同一個指標型別(命名的不同是為了概念上更明確)

②linklist型別的指標變數head表示它是單連結串列的頭指標

③listnode *型別的指標變數p表示它是指向某一結點的指標

6、指標變數和結點變數

┌────┬────────────┬─────────────┐

│    │    指標變數    │     結點變數    │

├────┼────────────┼─────────────┤

│ 定義 │在變數說明部分顯式定義 │在程式執行時,通過標準 │

│ │ │函式malloc生成 │

├────┼────────────┼─────────────┤

│ 取值 │ 非空時,存放某型別結點 │實際存放結點各域內容 │

│ │ 的地址 | │

├────┼────────────┼─────────────┤

│操作方式│ 通過指標變數名訪問 │ 通過指標生成、訪問和釋放 │

└────┴────────────┴─────────────┘

①生成結點變數的標準函式

p = malloc( sizeof(listnode) );

/* 函式malloc分配一個型別為listnode的結點變數的空間,並將其首地址放入指標變數p中 */

②釋放結點變數空間的標準函式

free(p); /* 釋放p所指的結點變數空間 */

③結點分量的訪問

利用結點變數的名字*p訪問結點分量

方法一:(*p).data和(*p).next

方法二:p-﹥data和p-﹥next

④指標變數p和結點變數*p的關係

指標變數p的值——結點地址

結點變數*p的值——結點內容

(*p).data的值——p指標所指結點的data域的值

(*p).next的值——*p後繼結點的地址

*((*p).next)——*p後繼結點

注意:① 若指標變數p的值為空(null),則它不指向任何結點。此時,若通過*p來訪問結點就意味著訪問一個不存在的變數,從而引起程式的錯誤。

② 有關指標型別的意義和說明方式的詳細解釋

我寫的建立單連結串列函式,最後怎麼返回連結串列?

6樓:匿名使用者

建立連結串列的函式將所建立的連結串列傳遞給呼叫者,可以使用下列方法:

呼叫者在呼叫建立連結串列的函式之前,建立連結串列首結點(結點的資料均設定為0),然後以該結點的指標為實參呼叫建立連結串列的函式。例如:

head=(listnodeptr)malloc(sizeof(listnode));

f=list_create(head, ...);

將建立連結串列的函式定義為這樣:

listnodeptr list_create( ... ){//建立連結串列

return head; // head為連結串列頭指標}呼叫語句為:

listnodeptr head;

head=list_create( ... );

將建立連結串列的函式定義為這樣:

int list_create( listnodeptr *head, ... ){

//建立連結串列

*head = h;  //h為連結串列頭指標return ...;

}呼叫語句為:

listnodeptr head;

f=list_create(&head, ... );

連結串列的建立

c語言實現連結串列的建立,按逆序複製 include include struct node struct node create int numnode return head struct node reversecopy struct node head1,int numnode return...

如何用c語言建立連結串列實現增刪改查

include include include 先定義一種student型別,表示一個學生的資訊,如下 typedef struct student student 定義一種node型別,表示一個結點資訊,如下 typedef struct node node 1 寫出建立一個帶頭結點的線性連結串列...

兩題單連結串列逆置,求講解,求兩個單連結串列逆置的演算法。

第一個,有頭結點的單連結串列,從頭到尾順次摘下所有結點並插入在表頭 p head next p指向第一個結點head next null 斷開頭結點和連結串列while p 當連結串列不為空時 第二個,有頭結點單連結串列,至少一個資料結點,與前面的相似,只是處理方法為每摘下一個結點,將其後繼域指向當...