我试图通过向量上的链表执行某些操作。
我们已经获得了结构类型向量
typedef struct{
int *array; // a pointer to vector's storage
int size; // the current number of elements in the vector
int cap; // the current capacity of the vector;
int init_cap; // the initial capacity the vector was initialised with.
} vector;
现在,我想创建一个函数,它接受一个指向vector结构的指针,并用给定的容量初始化它。所有字段都要初始化。我想用链表来做这件事。
这是我的代码
#include <iostream>
using namespace std;
typedef struct node {
int *array; // a pointer to the vector's storage
int size; // the current number of elements in the vector
int cap; // the current capacity of the vector
int init_cap; // the initial capacity the vector was initialised with
node *next;
} vector;
node *head = NULL;
我可以从矢量结构中创建节点,就像我在上面编写的代码中尝试过的那样吗?
void vector_init(vector *v, int capacity){
//initialising the vector with the given capacity
v->size = capacity;
v->cap = capacity;
v->init_cap = capacity;
//linked list with nodes created and values initialised
node *temp, temp2;
temp = head;
temp = new node;
temp->size = capacity;
temp->cap = capacity;
temp->init_cap = capacity;
temp->next = temp2
temp2 = new node;
temp2->size = capacity;
temp2->cap = capacity;
temp2->init_cap = capacity;
temp2->next = NULL;
}
我是否制作了链接列表,并正确初始化了值?如果我们不创建临时点temp和temp2,只使用v-&gt; size等来初始化字段,那会使它成为一个链表吗?
答案 0 :(得分:1)
您的代码存在许多问题。
从技术上讲,这是一个链接列表,但您的 vector_init()功能无法正常工作。除了我上面所写的内容:
temp = head;
temp = new node;
没有意义。第一个使变量 temp 指向 head ;第二个告诉temp开始指向新变量,因为你正在使用运算符 new ,它分配空间并返回指向新创建的变量的指针。因此,当您执行进一步操作时,您不会对变量头进行操作,而是在 temp 指针失效后将丢失的另一个变量上运行。
您根本不需要 temp 和 temp2 变量。他们只是膨胀代码。
这两行:
temp-&gt; next = temp2;
temp2 = new node;
应该切换位置,因为现在你分配一个尚未初始化的指针。
此外,您的教练说你可以使用链接列表解决所有类型的问题是不对的。它可以在某些情况下解决一些问题,或者根据上下文创建新问题。
我不想变得粗鲁,但是你所给予的任务的概念似乎存在根本性的错误。我想有人真的没想过。