c語言連結串列問題,c語言連結串列的問題

2022-02-24 19:14:02 字數 4560 閱讀 1482

1樓:匿名使用者

連結串列必須知道頭指標在哪第一個紅圈是初始化指標 因為你剛開始定義連結串列指標的時候指標指向的是隨機的 所以只能初始化

第二個紅圈是第一次給連結串列分配空間 如果頭指標為空就把連結串列指標給頭指標 這倆個語句確實只執行一次 但我沒理解你話的意思

2樓:

你的理解當然不對了。前一個頭(head)、尾(tail)指標初始化語句:head = tail = null ; 是進行指標變數初始化;而後面的語句:

head = tail = p ; 指的是當成功給指標變數 p 分配空間之後,head 和 tail 變數指向 p 節點的首地址。

而且了,你的程式還有一個非常重要的地方有不足就是:沒有對指標變數 p 是否成功分配到記憶體進行判斷。即:

p = (struct chain *)malloc(sizeof(struct chain) ) ;

if( p == null )

p->next = null ;

p->value = x ;

......

3樓:

你這個是使用尾插法建立連結串列,兩個紅圈的**都是有必要的,第二個紅圈的執行條件是if(head == null)成立時,才會執行,也就是建立第一個節點的時候會執行該條語句,從建立第二個節點開始就執行esle分支的語句了呀。這樣,head始終指向連結串列的頭結點,而tail始終指向當前連結串列的尾節點了。

c語言連結串列問題

4樓:樓主_回頭是岸

加空格struct student*head;

struct student *head;

struct student*p;

struct student *p; 你的明白?

感覺你是複製的

而且。。

5樓:匿名使用者

s/void print(struct student head)/void print(struct student *head)

引數少了一個 "*"

c語言連結串列的問題

6樓:阿冬

總體來說,這是一段單連結串列維護的**。

struct lnode;

具體的函式中,create用於建立連結串列,建立過程中會要求使用者輸入每個結點中儲存的資料;print用於列印整個連結串列;listinsert用於在特定位置插入新結點;listdelete用於刪除特定位置的結點;locateelem用於查詢等於輸入值的結點位置。

c語言連結串列結構體的問題 20

7樓:縹緲一樣

結構體定義指標應該是這樣的: node *p;或者struct node *p;

在定義/宣告函式時,void as(struct node *p);這樣是不對的。應該是這樣:

void as(struct node *p);

或者void as(node *p);

函式呼叫的時候不用指標直接放入結構體該是這樣呼叫的:

node stnod;

as(&stnod);

它和node stnod,*p_stnod;

p_stnod=&stnod;

as(p_stnod);

作用是一樣的。

c語言連結串列的基本問題

8樓:匿名使用者

#include

#include

#include

#include

#define n 3

#define len sizeof(struct grade)struct grade

>score);

new->next=null;

if(i==1)

head=new;

else tail->next=new;

tail=new;

}return head;

}int main()}

9樓:匿名使用者

你要說報錯資訊出來呀,才能大概知道錯在哪

c語言程式連結串列問題

10樓:自我程式設計

雖然題目一個連結串列只要3元素,但我不想把**寫死,修改常量可實現任意長度連結串列。

另外你強調不能用頭結點,所以我用指向首節點的指標。(頭結點只是方便定位連結串列,和首節點指標其實意義相同,否則你去哪找之前建立好的連結串列)

#include

#include

#define ln 3//最大連結串列元素數量,這裡題目只要3個

typedef struct list

list;

list * creatlist();

list *px(list *listp);

void printflist(list *listp);

list *clists(list *listp1,list *listp2);

int main()

void printflist(list *listp)//列印連結串列

printf("\n");

}list * creatlist()//輸入建立單連結串列,返回首節點指標

return listp;

}list *px(list *listp)//排序,返回首節點指標

if(listf->next==null)

break;

listf=listf->next;

}return listp;

}list *clists(list *listp1,list *listp2)//連線兩個連結串列,返回首節點指標

listp1->next=listp2;

return listp3;}

11樓:匿名使用者

作業系統 win 8.1// 編譯環境 visual stuido 2017#include#include#includetypedef int elementtype; // 定義資料型別,可根據需要進行其他型別定義 // 連結串列節點的定義typedef struct listnode node, *pnode;// 連結串列建立函式定義pnode createlist(void)

pnode ptail = phead; // 連結串列的末尾節點,初始指向頭節點

ptail->next = null; // 最後一個節點指標置為空

printf("請輸入節點個數:");

輸入節點個數

for (int i = 0; i < len; i++)

printf("請輸入第 %d 個節點的資料:", i + 1);

輸入連結串列節點的資料

pnew->element = val; // 把資料賦值給節點資料域

ptail->next = pnew; // 末尾節點指標指向下一個新節點

pnew->next = null; // 新節點指標指向為空

ptail = pnew; // 將新節點複製給末尾節點 }

printf("建立連結串列成功\n"); return phead; // 返回頭節點}// 主函式 int main()

12樓:

你的這個要求不會有人答應的。因為:(1)、你的這個題目難度很大,首先從程式的程式設計難度和規模上講,比老師留的一個 c 語言大作業還大,更何況在你的要求中還涉及到了 c 語言的最精華、同時也是最、最難於除錯的程式**:

指標!!因為指標在 c 語言中是一個極其重要、且非常抽象的概念,況且如果再將涉及到的指標的相關知識,應用於建立、刪除、排序各種連結串列(即:單連結串列一個指標變數、或者是:

雙連結串列兩個指標變數)、並且除錯通過這類的源**,那就更是難上加難的事情!

(2)、此外必須要知道:編寫任何一個高階語言源程式,要想從程式設計、編譯、除錯、直到最後執行出正確的結果,那是必須要有一個上機程式設計環境,且經過親自上機除錯,而不是靠在紙上寫完程式,就一定能夠保證程式執行出正確結果的。

c語言的連結串列問題 50

13樓:匿名使用者

#include

#include

#include // for strlen()struct node ;

//struct node *head;

node *init()

node *creatlist(node *head,char s)p->link = null;

return head;

}void show(node *head)printf("\n");

}int main(void)

C語言連結串列問題,求解答

struct node create struct node head return head 該建表函式的邏輯關係是對的。首先定義一個節點,且將這個結點的指標域地址賦給p1和p2 請仔細思考這句話的意思 並將讀入的資料存入資料域num,用p1 next null 使其指向null。如果該結點是連結...

c語言程式設計連結串列題,c語言程式設計連結串列題

include include include typedef struct student message stu struct student message static stu head null 建立一個節點,並賦予相應的數值 stu create link node char const...

C語言靜態連結串列輸出問題

字串不能用 號賦值。你的程式需要用到string.h標頭檔案。把類似a.name 6 yin 的語句改成strcpy a.name,yin include include struct people int main while p null return 0 你想做什麼?以下幾個不合法操作 1 a...