当前位置:首页 » 服务存储 » 链表被存储在哪
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

链表被存储在哪

发布时间: 2022-12-15 04:20:40

⑴ 算法中的链表到底是什么,用处在哪里

链表由多个结点连接而成,一个结点分为数据域和指针域,数据域存储数据,指针域存储下一个结点的内存地址。链表结点的内存地址可以不连续,可以充分利用内存空间,代价是查找慢,必须从头结点开始查找。

⑵ 什么是单链表,储存上有哪些特点

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。
祝好运,望采纳

⑶ 顺序链表到底是什么,在哪里讲的

顺序链表

顺序链表其实就是一个动态的数组而已。在该链表的结构体中包含链表的基地址和链表当前的长度和链表当前已分配的存储容量。
注意:顺序链表不和单链表和双链表一样,它并不是每个元素都包含在一个结点里面。它是类似于数组,有一个类似数组名的基地址和一个表示链表当前长度的变量以及一个表示当前已分配容量的变量。并且这些均属于整个链表。并不属于某个元素。
#include <iostream>
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10
typedef bool Status;
#define OK true
#define ERROR false
//定义一个链表结点
typedef struct
{
int *elem; //基地址指针,可以理解为就是一个动态数组的名字而已
int length;//当前长度
int listsize;//当前分配的存储容量
}SqList;
//初始化链表函数
Status InitList(SqList &L)
{
L.elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
if (!L.elem)
{
cout << "Error!" << endl;
exit(0);
}
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
Status ListInsert(SqList &L,int i,int e)
{
if (i<1 || i>L.length+1)
return ERROR;
if (L.length >= L.listsize)
{
int *newbase = (int *)realloc(L.elem,(L.listsize + LISTINCREAMENT)*sizeof(int));
if (!newbase)
{
cout << "Error!" << endl;
exit(0);
}
L.listsize += LISTINCREAMENT;
L.elem = newbase;
}
int *q = &(L.elem[i-1]);//获得i元素的指针
for (int *p = &(L.elem[L.length - 1]);p >= q; --p)
{
*(p+1) = *p;
}
*q = e;
++L.length;
return OK;
}
Status ListDelete(SqList &L,int i,int &e)
{
int *p = &(L.elem[i]);
e = *p;
int *q = &(L.elem[L.length]);
for (; p != q; ++p)
{
*(p - 1) = *p;
}
--L.length;
return OK;
}
int main()
{
SqList q;
InitList(q);
for (int i = 0;i < 10; i++)
{
cin >> q.elem[i];
q.length++;
}
for (i = 0;i < q.length; i++)
{
cout << q.elem[i] << " ";
}
cout << endl;
ListInsert(q,5,6);
for (int *p = q.elem;p != &(q.elem[q.length]);++p)
{
cout << *p << " ";
}
cout << endl;
int e;
ListDelete(q,5,e);
for (p = q.elem;p != &(q.elem[q.length]);++p)
{
cout << *p << " ";
}
return 0;
}

⑷ C语言中链表的存储、读取、修改问题

1、链表存到文件中去后,再取出来是不是要再次对各个元素进行链表的关联(就是下一个元素地址赋予前一个元素中的地址变量中)?有没有更简单的方法让其自动恢复原先的链表关系?
答:链表的关系的却需要重新建立,没有别的方法,这里只需要重新设置,因为链表是存储在内存中的,每次malloc出来的指针地址不一致,无法存储到文件中,下次继续使用。

2、编辑前,是否需要将整个文件流从文件中都读取至堆里去,连立成一个链表?如果文件很大,大过内存怎么办?
答:文件中存储的是整个链表的信息,你只需要每次读出一个struct就可以了。这个malloc出来的struct中你需要读取一个index的值,然后以这个index的值再建立一个链表,将原来那个malloc出来的struct可以释放,这样就可以不用担心文件很大,怕内存不足的情况。因为即使你的链表再长,一个int值足以表示。如果怕int(4字节)不够,可以用double类型,甚至可以用链表嵌套。

3、如果整个文件都读出至堆中,并关联成了链表,那么修改后用fwrite()再次保存至文件中时,是不是把原来的记录都覆盖了还是在后面追求啊?
答:这里写文件就看你自己是怎么打开文件了。(存储的时候是不是按照struct大小存储还是按照实际数据大小存储)最好的方式是可以随便修改,这种方式最难,因为要考虑到更改的是第几个字节。最简单的方式,直接将文件删除,重新建立,但是这样就必须要将所有数据读取到内存中。

如果你要实现问题2中的方法,则问题3即要做大量的修改。

⑸ 链表在内存中的存储方式到底是怎样的数据域跟指针域的类型又分别是什么

链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素 与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外(各种数据类型),还需存储一个指示其直接后继的信息(即直接后继的存储位置)(指针类型)。由这两部分信息组成一个"结点",表示线性表中一个数据元素