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

链式存储结构代码

发布时间: 2022-10-16 00:43:31

A. 分别写出线性表的链式存储结构、二叉树的二叉链表存储机构的类C语言描述

线性表的链式存储结构:
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
(被封装好的每个节点,都有一个数据域data和一个指针域*next用于指向下一个节点)
二叉树的二叉链表:
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
(被封装好的每个节点,都有一个数据域data和两个指针域 *lchild,*rchild分别指向左右子树)

需要什么类型的数据作为数据域可更改,或者typedef int ElemType;和typedef int TElemType;中的int,比如改为char、float等或者自定义数据类型。

B. .写出链式存储的常用操作(函数)程序

摘要 t © 1999-2020, CSDN.NET, All Rights Reserved

C. 用C语言实现定义线性表的链式存储结构

#include<stdio.h>
#include<malloc.h>
typedef struct{
int *elem;
int length;
int listsize;}sqlist;

int init_List(sqlist &L){
L.elem=(int*)malloc(100*sizeof(int));
if(!L.elem) return 0;
else
L.length=0;
L.listsize=100;return 1;}

void main(){
sqlist l;
int *p;int a;int e;int b;
int i;
if(!init_List(l)) printf("内存分配失败");
else
p=l.elem;
printf("输入线性表的长度l.length的值:\n");
scanf("%d",&l.length);
printf("输入%d个数:\n",l.length);
for(i=0;i<l.length;i++)
scanf("%d",p++);
printf("创建的线性表为:\n");
for(i=0;i<l.length;i++)
printf("%d\n",l.elem[i]);}

D. 线性表链式存储结构的优点和缺点有什么

一、线性表链式存储结构的优点:

1、均匀性:虽然不同数据表的数据元素可以是各种各样的,但对于同一线性表的各数据元素必定具有相同的数据类型和长度。对于线性链表,可以从头指针开始,沿各结点的指针扫描到链表中的所有结点。

2、有序性:各数据元素在线性表中的位置只取决于它们的序号,数据元素之前的相对位置是线性的,即存在唯一的第一个和最后一个的数据元素,除了第一个和最后一个外,其它元素前面均只有一个数据元素(直接前驱)和后面均只有一个数据元素(直接后继)。

二、线性表链式存储结构的缺点:

线性表链式存储结构不要求逻辑上相邻的元素在物理位置上是相邻,因此,它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点。

(4)链式存储结构代码扩展阅读:

线性表链式存储结构的其他介绍:

一般在计算机的硬盘中,文件都是链式存储的。我们知道,多个扇区组成一个簇,簇是计算机存储数据的基本单位。

而一个文件是存储在多个在空间上也许并不相连的簇中的,这就是链式存储。但是为了能够读取出这个文件,计算机会在该文件第一部分的尾部写上第二部分所在的簇号。

另一部分的尾部又写上第三部分,以此类推,最后一部分写上一段代码,表示这是该文件的最后一部分。值得一提的是,高簇号在后。(如代码所示的1234实为簇3412)文件所占簇可认为是随机分配的。

E. 如何用C语言实现简单的链式存储结构

使用结构体:
typedef struct node{
int data;
struct node* next;
}Node;
就可以实现,以上是一个单链表的节点元素,每个节点的next指向下一个节点,就可以实现链式存储了。遇到其他类似的问题,可以根据需要设置相应的指针域。

F. 用链式存储结构求子串,我的代码如下,请问为什么输出结果是null

s2的赋值方式不对,打印方式也不对,以下两个函数有修正:
int substr(slstrtype *s1,slstrtype **s2,int m,int n)
{
slstrtype *p,*q,*v;
int l1,j;
p=s1;
for(l1=0;p->next!=NULL;p=p->next) l1++;
if(m<=0||m>l1||n<=0)
{
s2=NULL;
return false;
}
p=s1->next;
for(j=0;j<m;j++) p=p->next;
*s2=(slstrtype *)malloc(sizeof(slstrtype));
(*s2)->next=NULL;
v=*s2;
q=v;
for(j=0;j<n&&p->next!=NULL;j++)
{
q->str=p->str;
p=p->next;
q=(slstrtype *)malloc(sizeof(slstrtype));
q->next=NULL;
v->next=q;
v=q;
}
return true;
}

int main()
{
int substr(slstrtype *,slstrtype **,int,int);
slstrtype *initial(slstrtype *);
slstrtype *s1,*s2=NULL;
int m,n;
s1=NULL;
s2=NULL;
printf("输入主串:");
s1=initial(s1);
printf("取子串:");
scanf("%d %d",&m,&n);
printf("子串为:");
substr(s1,&s2,m,n);
while(s2!=NULL)
{
printf("%c",s2->str);
s2=s2->next;
}
return 0;
}

G. 已知长度为n的线性表A采用链式存储结构

// 可以通过排序解决,也可以直接倒置链表
// 下面是链表倒置代码(假定被倒置的链表没有头结点)
LinkList *Inversion(LinkList *head) {
LinkList *p = NULL,*q = head,*t;
t = q->next;
while(q) {
q->next = p;
p = q;
q = t;
t = t->next;
}
head = p;
return head;
}

H. 链式存储结构的特点是利用什么来表示数据元素之间的逻辑关系

1。在线性表的顺序存储结构中,元素之间的逻辑关系是通过(元素的存储地址)决定的;

2。在线性表的链接存储中,元素之间的逻辑关系是通过(结点中的指针)决定的。