没有全局变量的链表



我一直试图做一个链表在C现在一段时间,并设法这样做了。现在我正试图将我的全局指针/变量替换为本地指针/变量,以便我在函数之间传递我的结构。问题是,我在这个问题上读得越多,做得越多,我脑子里的错误和爆炸就越多。

由于我的代码有点长(100行),我将尝试解释它在做什么以及如何做。

我宣布了一个结构体:

struct node {
    char Name[21];
    struct node *Next;
};

我还在任何函数之前声明了一个指向我的结构的指针:

struct node *global;

*global是一个全局指针不是吗?

现在我有三个函数,里面有新的指针来处理我的链表:

void add(void); //add nodes to list with *global, *pointer and *last
    struct node *pointer *last;
void print(void); //print node inside the list with *global and *pointer
    struct node *pointer;
void quit(void); //free malloc'd list using *global and *pointer
    struct node *pointer;

很明显,我没有以任何方式将我的结构从一个函数传递到另一个函数。我只是将全局*全局赋值给函数内部的局部指针,这工作得很好,但不是我想要学习的。

我一直在为我的问题寻找答案,但显然我在c的基础知识中遗漏了一些巨大的东西。

那么,我到底应该在这里做什么?如何移动

struct node *global;
例如,我可以在main函数中创建一个链表,从这个链表传递给add, print和quit函数。如何从这些函数中返回这个列表呢?

另外,原来的结构应该是在代码的开始,还是我必须在每个函数内再次创建它,以避免全局指针/变量?

struct node* global是一个全局指针不是吗?

是,指针在整个程序中都是可用的。

我如何移动Struct node *global;

例如,我可以在main函数中创建一个链表,从这个链表传递给add, print和quit函数。如何从这些函数中返回这个列表呢?

必须使用双星指针,下面是描述它的伪代码

struct listNode {                                      
   char data;
   struct listNode *nextPtr; // pointer to next node
};

void insert(**localptr,char item);
void remove(**localptr,char item);

int main()
{
 listnode * startptr;
 ..
 insert(&startptr,'a');
 ..
 ..
 remove(&startptr,'b');
 ..
}

在insert()/remove()的实现中,你必须取起始地址并在列表中导航,在找到节点后,备份下一个和上一个指针,添加或删除节点,然后恢复上一个和下一个指针,

在上面的代码中,在main()中本地创建了一个开始指针,并将地址传递给insert()/remove()中的双星指针,从而消除了全局指针的需要。

基本思想是,将所有全局指针作为参数传递给函数。例如,add变成

void add(node *ptr, node *last);

对所有函数都这样做,直到没有全局变量。

尝试为您的linkedlist定义另一个结构体:

struct node
{
     type value;
     node * next;
}
struct linkedList
{
    node * first;
}
void add(linkedlist a,type data){
 node * newNode ;
 newNode->value = data;
 newNode->next = a->first;
 a->first = newNode;
}

等等…

然后使用链表

  void main()
 {
    linkedlist a;
    type x= somevalue;
    add(a,somevalue);
}

相关内容

  • 没有找到相关文章

最新更新