關於c 用雙向鍊錶實現電話薄管理系統的問題

時間 2022-10-25 01:25:37

1樓:兔子和小強

結構體存放資料,頭尾指標指向鍊錶的頭部和尾部,可以通過頭尾指標來找到鍊錶。

怎麼會放在結構體裡。

2樓:大山人

首先來說,你當然可以放在結構體裡面,這是肯定的。但是不建議這麼做,而且所有的書上例子都不會有的。

但是,你要想,這裡面用了動態分配吧?比如malloc或者new之類的,肯定用了吧。那你告訴我,為什麼要用呢???

直接申請乙個結構體,不用friend_node->next, 改用friend_node.next不是更方便嗎?

原因在於,節省記憶體。

為什麼節省呢???

因為是動態分配的,你寫的乙個函式或者方法,裡面插入乙個節點,或者刪除乙個節點,你不呼叫,就不建立,用完了就free刪除。這就是動態分配的好處,能夠大大的節省記憶體,因為用完就扔了,這個記憶體塊可以供其它地方用了。

所以節省節省記憶體,不是每乙個節點都用的著頭指標和尾指標吧???所以也能節省。 因為你中間,要去申請,比如用malloc(sizeof(struct)),一下子申請了乙個結構體的空間,結構體越大,所有節點的占用的空間就爆漲了很多,很不理想的方式。

所以,只需要定義所有節點都會共用到的東西,就行了,這是最普遍的做法了。

3樓:花的箴言

忘了,再翻翻書,再解答

c++程式設計,**簿,要求以雙向鍊錶儲存 20

用〈〈資料結構〉〉中的雙向鍊錶作資料結構,結合c語言基本知識。編寫乙個通訊錄管理系統。 20

4樓:那天小雨天

#include

#include

#define null 0

#define overflow -1

#define ok 0

#define error -2

typedef int elemtype;

typedef struct node

node,*linklist;

void init_linklist(linklist *head_pointer)

int insert_first(linklist *head_pointer,elemtype x)

linklist location_linklist(linklist head,elemtype x)

return p;

}int delete_linklist(linklist *head_pointer,elemtype x)

else

q=p;p=p->next;}}

return error;

}void show_linklist(linklist head)

}int length_linklist(linklist head)

return sum;

}void setnull_linklist(linklist *head_pointer)

}int main(void)

}while(i!=6);

setnull_linklist(&head);

printf("鍊錶已清空,程式退出...\n");

return 0;}

乙個複雜的c++程式,**簿管理系統

5樓:匿名使用者

參考windows程式設計和資料庫通用模板聲設計兩本書能幫你解決問題

c++ 單向鍊錶和雙向鍊錶有什麼區別?各自有什麼優缺點?

6樓:匿名使用者

一、指代不同

1、雙向鍊錶:也叫雙鏈表,是鍊錶的一種,每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅

二、優點不同

1、雙向鍊錶:從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問前驅結點和後繼結點。

2、單向鍊錶:單個結點建立非常方便,普通的線性記憶體通常在建立的時候就需要設定資料的大小,結點的訪問方便,可以通過迴圈或者遞迴的方法訪問到任意資料。

三、缺點不同

1、雙向鍊錶:增加刪除節點複雜,需要多分配乙個指標儲存空間。

2、單向鍊錶:結點的刪除非常方便,不需要像線性結構那樣移動剩下的資料,但是平均的訪問效率低於線性表。

7樓:大野瘦子

區別:一、意思不同

雙向鍊錶是每個節點有2個鏈結,乙個是指向前乙個節點(當此鏈結為第乙個鏈結時,指向的是空值或空列表),另乙個則指向後乙個節點(當此鏈結為最後乙個鏈結時,指向的是空值或空列表),意思就是說雙向鍊錶有2個指標,乙個是指向前乙個節點的指標,另乙個則指向後乙個節點的指標。

二、使用場景不同

單向鍊錶適用於節點的增加刪除,雙向鍊錶適用於需要雙向查詢節點值的情況。

三、用法不同

每個雙鏈表的節點要比單鏈表的節點多乙個指標,而長度為n就需要 n*length(這個指標的length在32位系統中是4位元組,在64位系統中是8個位元組) 的空間,這在一些追求時間效率不高應用下並不適應,因為它占用空間大於單鏈表所占用的空間;這時設計者就會採用以時間換空間的做法,這時一種工程總體上的衡量。

優缺點:

一、單向鍊錶

優點:單向鍊錶增加刪除節點簡單。遍歷時候不會死迴圈。

缺點:只能從頭到尾遍歷。只能找到後繼,無法找到前驅,也就是只能前進。

二、雙向鍊錶

優點:可以找到前驅和後繼,可進可退。

缺點:增加刪除節點複雜,需要多分配乙個指標儲存空間。

8樓:匿名使用者

一、結構不一樣

1、單向鍊錶:每個節點由乙個資料域和乙個指標域構成。

2、雙向鍊錶:每個節點由乙個資料域和兩個指標域構成。

二、方向不一樣

三、適用不一樣

1、單向列表:適用於單向遍歷,儲存空間小的資料。

2、雙向列表:適用於雙向遍歷資料。

單向鍊錶的優缺點:

1、優點:儲存空間小,增加刪除節點簡單。

2、缺點:只能從頭到尾遍歷。只能找到後繼節點,無法找到前驅節點。

雙向鍊錶的優缺點:

1、優點:可以雙向遍歷,既能找到後繼節點,也能找到前驅節點。從任一節點都可以訪問到其他所有節點。

2、缺點:儲存空間大,增加刪除節點較複雜。

擴充套件資料鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點組成,每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。

9樓:射手座的

單向鍊錶和雙向鍊錶的區別:

一、方向不同

二、使用情況不同

1、單向鍊錶:適用於節點的增加刪除。

2、雙向鍊錶:適用於需要雙向查詢節點值的情況。

三、讀取不同

1、單向鍊錶:只能單向讀取。

2、雙向鍊錶:可以雙方向讀取。

單向鍊錶和雙向鍊錶的區別可看下圖:

單向鍊錶的優點和缺點:

2、優點:單向鍊錶增加刪除節點簡單。遍歷時候不會死迴圈;

3、缺點:只能從頭到尾遍歷。只能找到後繼,無法找到前驅,也就是只能前進。

4、適用於節點的增加刪除。

雙向鍊錶的優點和缺點:

1、雙向鍊錶:有兩個指標,乙個指向前乙個節點,乙個後乙個節點。

2、優點:可以找到前驅和後繼,可進可退;

3、缺點:增加刪除節點複雜,多需要分配乙個指標儲存空間。

4、適用於需要雙向查詢節點值的情況。

單向鍊錶(單鏈表)是鍊錶的一種,其特點是鍊錶的鏈結方向是單向的,對鍊錶的訪問要通過順序讀取從頭部開始;鍊錶是使用指標進行構造的列表;又稱為結點列表,因為鍊錶是由乙個個結點組裝起來的;其中每個結點都有指標成員變數指向列表中的下乙個結點;

列表是由結點構成,head指標指向第乙個成為表頭結點,而終止於最後乙個指向null的指標。

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。

10樓:愛講真話的阿拉蕾

2、功能不同:單向鍊錶只能next ,雙向鍊錶可以return。

3、單雙向不同:單鏈表只能單向讀取,雙向鍊錶可以通過prev()快速找到前一結點。

單向鍊錶優缺點:

1、優點:單向鍊錶增加刪除節點簡單。遍歷時候不會死迴圈;

2、缺點:只能從頭到尾遍歷。只能找到後繼,無法找到前驅,也就是只能前進。

雙向鍊錶優缺點:

1、優點:可以找到前驅和後繼,可進可退;

2、缺點:增加刪除節點複雜,多需要分配乙個指標儲存空間。

11樓:你好嗎快樂嗎

單向鍊錶:單向鍊錶包含兩個域,乙個是資訊域,乙個是指標域。也就是單向鍊錶的節點被分成兩部分,一部分是儲存或顯示關於節點的資訊,第二部分儲存下乙個節點的位址,而最後乙個節點則指向乙個空值。

優點:單向鍊錶增加刪除節點簡單。遍歷時候不會死迴圈。

(雙向也不會死迴圈,迴圈鍊錶忘了進行控制的話很容易進入死迴圈);缺點:只能從頭到尾遍歷。只能找到後繼,無法找到前驅,也就是只能前進。

雙向鍊錶:每個節點有2個鏈結,乙個是指向前乙個節點(當此鏈結為第乙個鏈結時,指向的是空值或空列表),另乙個則指向後乙個節點(當此鏈結為最後乙個鏈結時,指向的是空值或空列表)。意思就是說雙向鍊錶有2個指標,乙個是指向前乙個節點的指標,另乙個則指向後乙個節點的指標。

優點:可以找到前驅和後繼,可進可退;缺點:增加刪除節點複雜。

12樓:人才

單向鍊錶:

優點:單向鍊錶增加刪除節點簡單。遍歷時候不會死迴圈。(雙向也不會死迴圈,迴圈鍊錶忘了進行控制的話很容易進入死迴圈)

缺點:只能從頭到尾遍歷。只能找到後繼,無法找到前驅,也就是只能前進。

雙向鍊錶:

優點:可以找到前驅和後繼,可進可退。

缺點:增加刪除節點複雜(其實就複雜一點點)一般應用中單向鍊錶或迴圈鍊錶居多,雙向鍊錶不常用。當然特殊條件下雙向鍊錶很方便。尤其是需要查詢到某個節點後再查其前驅的工作中。

雙向鍊錶的建立c++中如何編寫乙個程式實現雙向鍊錶的建立,插入和刪除

用c++做乙個雙向鍊錶,實現插入刪除,最好用類 別用stl的list。 20

關於用c 求階乘之和的問題

上面我們就不看了,直接從迴圈開始看。這是做10的階乘。因為每次迴圈的過程都是一樣的,為方便後面的敘述,我將這個程式改為計算5的階乘,就是只把迴圈條件改為i 5,其他條件不變,不影響程式本身的思路。首先已經定義了i 1,s 1 進行第一次迴圈條件判斷。i小於等於5嗎?因為i 1,所以i小於10,進行迴...

求用C語言(不是C的基礎知識解決關於成績管理的問題

你所說的這些函式是要你自己實現還是已經實現了的?如果是要自己實現,那麼 量應該不小,我相信應該沒有人有耐心乙個個幫你實現,而如果是已經提供好了函式介面,你只要呼叫的話,那麼,你的這個問題就很簡單了,我想這個課題的最主要目的是要你們熟悉模組化的含義,讓你們明白 模組化的好處。首先,乙個成績管理系統必須...

關於用c語言列印菱形圖形的演算法思路

我說一下第二個,其實第乙個和第二個思路是一樣的。1.外面的for迴圈,用i控制行數,輸入整數為n,則整個圖形的行數為2 n 1,列數也是一樣的,你可以看看,就是說行數和列數是一樣的,所以內層迴圈和外層迴圈都是2 n 1,不信的話,你可以查查圖形的行列數。2.i n是控制下半個部分。因為0 j 2 n...

c 關於用類作為類中函式的引數問題

求兩點間距離的公式用錯了,引數貌似也不對,建議改成這樣 double distance mypoint point 定義類內部的函式不需要構造物件,把point後面的括號去掉 double distance mypoint point 當然寫成更好 double mypoint distance c...

新手的C 問題,關於字串逆序輸出,用遞迴函式

錯誤 convert 0 a o 這裡的字元陣列a並不是全域性變數,在函式中沒定義,額,而且拼寫錯誤,應該是零 0 而不是字母 o 修改 只要將char a 30 放到using namespace std 語句下面就行了。我暈 這什麼和什麼啊 你是要輸入一串數字 然後輸出一串數字麼 還有輸入也有問...