【问题标题】:Multiple Data Structures in CC中的多个数据结构
【发布时间】:2011-08-13 07:02:08
【问题描述】:

我有一个文件 queue.c,它在 C 中定义了一个队列。如何使 3 个独立的队列相互独立?我对 C 不是很有经验,我一直在 OO 的角度思考它,我知道我不能那样做。

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

struct Node
{
    char data;
    struct Node *next;
} *Head, *Tail;

void addCharacter(char c)
{
    struct Node *temp1, *temp2;
    temp1 = (struct Node *)malloc(sizeof(struct Node));
    temp1->data = c;

    temp2 = Tail;

    if(Head == NULL)
    {
        Head = temp1;
        Head->next = NULL;
        Tail = Head;
    }
    else
    {
        Tail = temp1;
        temp1->next = NULL;
        temp2->next = temp1;
    }
}

void deleteCharacter()
{
    struct Node *temp1 = Head;
    Head = temp1->next;
    free(temp1);
}

int replaceCharacter(char c)
{
    Head->data = c;
}

int main() {}

那是我的队列,我拥有的另一个 C 文件基本上是:

#include "queue.h"

我不知道从那里去哪里......

【问题讨论】:

  • OO 是一种设计风格,而不是语言特性。使用它在 C 中编程没有任何问题。将对象定义为结构,将指向它们的指针传递给每个“方法”(没有隐含的“自我”,所以你必须明确地做),你就快到了。

标签: c object queue


【解决方案1】:

不要创建 HeadTail 全局变量,而是创建另一个包含它们的结构,例如:

struct Queue {
    struct Node *head;
    struct Node *tail;
};

然后更改在队列上运行的函数以获取指向 Queue 结构的指针,然后对其进行操作。

您还需要一个将headtail 初始化为NULLinitQueue 函数。然后使用队列可以如下所示:

struct Queue queue1;
initQueue(&queue1);
addCharacter(&queue1, 'a');
//....

【讨论】:

  • 哦,这对我来说更有意义。感谢您的帮助。
【解决方案2】:

您可以为队列定义一个新结构。

struct Node
{
    char data;
    struct Node *next;
};
struct Queue
{
    struct Node *Head, *Tail;
    // optional int size;
};

然后为每个函数添加另一个参数:

void addCharacter(struct Queue *q, char c);

void deleteCharacter(struct Queue *q);

并使用q-&gt;Headq-&gt;Tail 访问。

【讨论】:

    【解决方案3】:

    你设计了这个队列库吗?在其当前形式中,您不能拥有多个队列,因为该函数使用全局指针HeadTail,并且无法告诉您的函数使用其他一些指针。

    【讨论】:

    • 我很好奇为什么这被否决了。
    【解决方案4】:

    您有一个全局 HeadTail。如果你想要多个列表,你需要多个头。所以你需要改变你的函数,让&amp;Head&amp;Tail成为参数。

    【讨论】:

      猜你喜欢
      • 2010-11-01
      • 2013-08-11
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多