簡體   English   中英

制作一個存儲列表大小的鏈接列表

[英]Making a linked list that stores the size of the list

我需要制作一個存儲整數數據的鏈表。 此外,列表還需要知道其大小(列表中的項目數)。

這是我的代碼。

linked.h文件

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; 第二,您應該輸入NULL0而不是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所必需的。您的編譯器可能有另一種選擇。

如果您的類型始終使用大寫字母,而不是使用Nodelist ,那就太好了。

您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM