[英]Making a linked list that stores the size of the list
我需要制作一個存儲整數數據的鏈表。 此外,列表還需要知道其大小(列表中的項目數)。
這是我的代碼。
typedef struct node Node;
struct node{
int a;
Node* b;
};
Node m;
typedef struct {
node* head;
int size;
}list;
list list1;
#include <stdio.h>
#include "linked.h"
list init(list list1)
{
list1.head = null;
list1.size = 0;
return list1;
}
void main()
{
list1=init(list1);
printf("%d",list1.size);
}
現在,在Windows上使用Turbo C運行時,結果為-“無法創建進程”。
有兩個錯誤:首先,您應該編寫Node* head;
而不是node* head;
第二,您應該輸入NULL
或0
而不是null
。
可能您的編譯器消息以某種方式被抑制。
是的,這是您可以啟動鏈表的方法,但是
list init(void)
{
list list1;
list1.head = null;
list1.size = 0;
return list1;
}
會更好。
並且還可以進行其他改進。
您的標頭不應定義list list1;
盡管它可能會聲明為extern list list1;
。 但是,為了通常可重用,標頭不應聲明變量。 (請參閱C中的外部變量是什么 。)
您的標頭中應包含多個包含保護。 (請參閱我是否應該在標題中使用#include 。)
您的標頭應聲明為操縱列表提供的功能。
您應該具有一個實現列表操作功能的實現文件( linked.c
與標頭名稱linked.h
一致)。 然后,主程序將簡單地使用這些功能。
您的main()
程序通常應具有返回類型int
; 這是標准C所必需的。您的編譯器可能有另一種選擇。
如果您的類型始終使用大寫字母,而不是使用Node
和list
,那就太好了。
您的init()
函數名稱不正確。 它的設計也很差。 您不需要輸入值和返回值。 您的代碼將傳入的結構視為方便分配的局部變量,並將其初始化並將其復制回; 沒有參數和list list1;
也可以正常工作list list1;
定義為局部變量。 而且,您可能應該避免使用與參數列表中的全局變量(或局部變量)相同的名稱。 編譯器對此並不感到困惑; 你可能是。 使用起來更常規:
static void list_init(list *new_list)
{
new_list->head = 0;
new_list->size = 0;
}
和:
list_init(&list1);
綜上所述,您的程序仍然沒有明顯的理由無法運行。
一種怪異的可能性是您的init()
函數使正常運行其自己的函數init()
的運行時感到困惑,並且您的初始化未達到編譯器的預期。
否則,您是否可以編譯和運行任何程序-“ Hello World”程序? 如果您可以一般地編譯和運行程序,則您的程序中有一些對系統不利的內容init()
函數占據了中心位置。 如果無法運行簡單的“ Hello程序”,則通常需要修復編譯器的安裝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.