gpt4 book ai didi

c - 如何在 C 中创建一个空链表?

转载 作者:行者123 更新时间:2023-11-30 14:36:00 26 4
gpt4 key购买 nike

我有一个 C 代码,其中分配我创建一个空列表。尽管我创建了一个 Element = 0,但程序仍然将其视为列表,因此它打印 0,而实际上我希望将其打印为 NULL。另外,当我打印列表的长度时,它也显示为 1,而不是我想要的 0。

这是我到目前为止的代码。

    #include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef int ElementType;

struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;

List CreateList();
int IsEmpty(List L);
int IsLast(List L);
Position GetNode(List L,int idx);
void FetalError(const char *msg);
void PrintList(List L);

struct Node {
ElementType Element;
Position Next;
Position Previous;
};

List CreateList()
{
List L;
L= (List)malloc(sizeof(struct Node));
if(L==NULL) FetalError("Out of Memory");
L->Element = 0;
L->Next = NULL;
L->Previous = NULL;
return L;
}

Position Insert(ElementType X, List L, Position P)
{
Position Tmp;
Tmp=(Position)malloc(sizeof(struct Node));
if(Tmp==NULL) FetalError("Out of Memory");
Tmp->Element=X;
Tmp->Next=P->Next;
P->Next=Tmp;
return Tmp;
}

int IsEmpty(List L){
return(L->Next==NULL);
}

int IsLast(List P){
return(P->Next==NULL);
}

void FetalError(const char *msg)
{
printf(msg);
exit(-1);
}

PrintList(List L){

while(L!= NULL){
printf("%d <-> ", L->Element);
L=L->Next;
}
printf("\n");
}

int getCount(List L)
{
int count = 0; // Initialize count
struct Node* current = L; // Initialize current
while (current != NULL)
{
count++;
current = current->Next;
}
printf("%d number of elements", count);
}
Position GetNode(List L, int idx){

int i = 0;
while (L != NULL)
{
if (i == idx)
return(L);
i=i+1;
L= L->Next;
}
return;
}

Position Last(List L)
{
return L;
}

int main(int argc, char *argv[])
{
int i;
ElementType X;
List L;
Position P, P1 , P2;

srand(0);

// creat an empty list
printf("Creating an empty list\n");
L = CreateList();
PrintList(L);
getCount(L);

// Insert at the beginning
printf("**(Inserting 5 random numbers at the beginning\n");
for( i=0 ; i<5 ; i++ ) {
Insert(rand(),L,L);
PrintList(L);
}
P = GetNode(L,5);
printf("The Element of 5th Node is %d\n",P->Element);
getCount(L);

return 0;
}

最佳答案

你创建了一个带有内存的对象,所以它不会是0\null。如果你想得到 null 对象,你应该返回 null。

关于c - 如何在 C 中创建一个空链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58257291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com