天天看點

《C語言—從入門到項目實踐》Issue分析及總結

在學習《C語言—從入門到項目實踐》總結了筆記,并分享出來。有問題請及時聯系部落客:​​Alliswell_WP​​,轉載請注明出處。

《C語言—從入門到項目實踐》(超值版)——聚慕課教育研發中心 編著

Issue分析及總結

第17章

問題描述:17.2中的連結清單的建立

代碼注釋及說明:

1 #define _CRT_SECURE_NO_WARNINGS
 2 #include "stdio.h"
 3 #include "malloc.h"
 4 #define NULL 0                          /*令NULL為0,用它表示空位址*/
 5 /*LEN代表struct stu結構體類型資料的長度*/
 6 #define LEN sizeof (struct stu) 
 7 struct stu
 8 {
 9     long int num;
10     float score;
11     struct stu *next;
12 };
13 int n;
14 struct stu *creat()                      /*此函數帶回一個指向連結清單頭的指針*/
15 {
16     struct stu *head, *p1, *p2;
17     n = 0;                                    /*n為結點的個數*/
18     p1 = p2 = (struct stu *)malloc(LEN);        /*開辟一個新單元,p1指向p2,共同指向這個新單元*/
19     scanf("%ld,%f", &p1->num, &p1->score);//如:輸入:1,1.5——>p1指向該節點,p2也指向該節點
20     head = NULL;//頭指針為空
21     while (p1->num != 0)
22     {
23         n = n + 1;//連結清單節點個數的遞增
24         if (n == 1)head = p1;//如果是第一個節點,令頭指針head指向p1
25         else p2->next = p1;//如果不是第一個節點,令p2的next指針指向p1
26         p2 = p1;//p2指針向後移動,p2指向p1(剛輸入的節點)
27         p1 = (struct stu *)malloc(LEN);//p1指向剛開辟的一個新單元
28         scanf("%ld,%f", &p1->num, &p1->score);//如:輸入:1,1.5——>p1指向該節點
29     }
30     p2->next = NULL;//輸入完畢,令p2的next域指向空(連結清單的結尾)
31     return(head);                            /*傳回連結清單的頭位址*/
32 }
33 void main()
34 {
35     creat();//此處可以調用create函數建立的連結清單
36 }      

思路:p1指向新插入的節點,p2的next域指向連結清單新插入的節點p1——>實作連結上節點p1,p2通過指向p1實作不斷後移。

問題描述:17.10中的迷宮問題求解的思路,怎麼找到出口,路過的下标為什麼會少一個?

思路:1)通過探測一個位置的右,下,左,上的位置(标志位)是否為0,而判定下一步是否可以移動到這個點;2)對走過的點,将其标志位設定為0,并将此點入棧;3)如果此點四周都無法走通,出棧,判斷剛出棧的點是否可以走通,依次下去;4)如果可以走到出口位置,表示存在這樣的路徑,如果走不到(即最後棧為空),表明不存在這樣的路徑。

因為涉及到對已經走過的點的出棧,是以(3行6列)出棧後後續路徑可以走通了,輸出了路徑,最後不存在(3,6)