當前位置:首頁 » 服務存儲 » 鏈式存儲結構代碼
擴展閱讀
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。在線性表的鏈接存儲中,元素之間的邏輯關系是通過(結點中的指針)決定的。