没有结构的链接列表

时间:2015-06-05 06:09:33

标签: c++

任何人都可以通过单链表帮助我吗?我知道如何使用struct,但现在我想知道如何只使用没有struct或nodes的数组和指针。算法请谢谢。

#include <iostream>
using namespace std;

const int size=5; 
int data[size];
int *mem;
int add[size];
int top = -1;

void AddLast(int value)
{ 
if(top==-1)
{
  top=data[value];               
 }
 else
 {
 top++;
 top=data[value];      
 }
} 


void print()
{   cout << "Queue: ";
for(int i = 0; i != top; i = (i + 1) % size)
{
    cout << data[i] << "->";
}
cout << endl;

}


int main()
{

 AddLast(2);
print();
AddLast(3);
print();
AddLast(4);
print();
cin.get();
    return 0;
    }

我想添加,添加第一个,然后添加排序......是这样的吗?

3 个答案:

答案 0 :(得分:3)

您不能只使用一个阵列,至少需要两个:一个用于数据,一个用于链接。如果您根本不想使用结构(虽然我真的没有看到它的原因),您可以拥有多个数据阵列。

数据数组包含实际数据,它没什么特别之处。链接数组包含数据数组的索引,其中每个索引都是&#34; next&#34;指针。

例如,假设您想要一个整数的链接列表,并且列表中有三个整数(它们的值不相关),让我们调用该数据数组d,然后你有{{1 },d[0]d[1]。列表中的第一个节点是d[2],后跟d[1]和最后d[0]。然后你需要一个head变量,它告诉哪个索引是列表的头部,这个head变量初始化为d[2](&#34; points&#34; to 1)。然后我们有链接数组,让我们称之为d[1],因为头是&#34;指向&#34;到l我们获取1以获取下一个节点,l[1]的内容为l[1],告诉我们下一个节点是0。要获取下一个节点,我们会检查d[0],为l[0]提供2。下一个链接d[2]可以l[2]来标记列表的结尾。

当然,数据数组和链接数组的大小必须相同。

答案 1 :(得分:1)

成员fun2 <- function(DF,vdep){ model.matrix(as.formula(paste(vdep, "~ .")), data = DF) } fun2(df, "a") (Intercept) b c 1 1 5 9 2 1 6 10 3 1 7 11 4 1 8 12 attr(,"assign") [1] 0 1 2 sA的结构数组B可以由三个数组Ca模拟b,例如c代表a[i],依此类推。所以这是你没有结构的要求。然后用数组做一个链表,即用索引代替指针,只是表示法;概念完全相同。但您可能会查找使用空闲列表的技术,这是一个可用逻辑节点列表;这允许您以简单的方式释放节点并分配它们。

答案 2 :(得分:1)

有一种(丑陋的)方法可以用数组做链接列表。

以下是一个如何使用数组执行操作的示例,但我绝不会建议您考虑这样做。

for ( map<string, int>::const_iterator it = symbolTable.begin(); it != symbolTable.end(); ++it)
    cout << it->first << ": " << it->second << '\n';

这太多了演员。如果你创建一个由两个指针组成的数组,并且只是在指针中将第一个值转换为你关心的内容,那就不那么难看了,但这仍然不是我推荐的。