當前位置:首頁 » 服務存儲 » 鏈式存儲結構和實現
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

鏈式存儲結構和實現

發布時間: 2022-09-26 21:36:50

『壹』 鏈式結構是什麼

鏈式結構是為了解決線性結構中間插入數據速度不友好而提出的解決方法,對初始化的數據添加next屬性,使得它指向下一個節點,這樣需要添加數據或者刪除數據(完全刪除,非重置為None)只需要將鏈式結構打斷並重新連接即可實現,不過需要犧牲線性結構的快速查詢性能。

鏈式結構特點:

1、比順序存儲結構的存儲密度小(鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,相比順序存儲結構增加了存儲空間)。

2、邏輯上相鄰的節點物理上不必相鄰。

3、插入、刪除靈活 (不必移動節點,只要改變節點中的指針)。

4、查找節點時鏈式存儲要比順序存儲慢。

5、每個節點是由數據域和指針域組成。

6、由於簇是隨機分配的,這也使數據刪除後覆蓋幾率降低,恢復可能提高。

7、它不要求邏輯上相鄰的元素在物理位置上也相鄰,因此它沒有順序存儲結構所具有的弱點,但也同時失去了順序表可隨機存取的優點。

『貳』 線性表的鏈式存儲結構定義及基本操作

是這個效果嗎

『叄』 如何用C語言實現簡單的鏈式存儲結構

使用結構體:
typedef struct node{
int data;
struct node* next;
}Node;
就可以實現,以上是一個單鏈表的節點元素,每個節點的next指向下一個節點,就可以實現鏈式存儲了。遇到其他類似的問題,可以根據需要設置相應的指針域。

『肆』 線性表鏈式存儲結構的基本操作演算法實現

這是我學數據結構時親手碼的,好用的話記得給分。。。。。
#include<iostream>
using
namespace
std;
//線性表的單鏈表存儲表示
struct
LNode
{
int
data;
struct
LNode
*next;
};
//逆序創建鏈表
void
CreateList(LNode
*L,int
a[],int
n)
{
LNode
*s;
L->next
=
NULL;
for(int
i=n-1;i>=0;--i)
{
s=
new
LNode;
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
//顯示鏈表
void
display(LNode
*L)
{
LNode
*p;
p=L->next;
while(p)
{
cout<<p->data<<"
";
p=p->next;
}
}
//插入結點操作
void
ListInsert(LNode
*L,int
d,
LNode
*s)
{
LNode
*p;
int
i=1;
p=L->next;
while(i<d-1)
{
p=p->next;
i++;
}
s->next=p->next;
p->next=s;
}
//刪除節點操作
void
ListDelete(LNode
*L,int
d,int
&e)
{
LNode
*p,*q;
int
i=0;
p=L->next
;
while(i<d-1)
{
q=p;
p=p->next;
i++;
}
e=p->data;
q->next=p->next;
delete
p;
}
//查找元素
LNode*
LocalElem(LNode
*L,int
e)
{
LNode
*p;
p=L->next;
while(p&&p->data!=e)
p=p->next;
return
p;
}
//逆置單鏈表
void
InvertLinkedList(LNode
*L)
{
LNode
*p,*s;
p=L->next;
L->next=NULL;
while(p)
{
s=p;
p=p->next;
s->next=L->next;
L->next=s;
}
}
int
main()
{
LNode
*H;
int
n;
cout<<"please
enter
the
length
of
the
list:
";
cin>>n;
int
*A=new
int[n];
int
i;
H=new
LNode;
H->next=NULL;
cout<<"please
enter
"<<n<<"
number
of
the
list:"<<endl;
for(i=0;i<n;i++)
cin>>A[i];
CreateList(H,A,n);
cout<<"show
the
members
of
the
list:
";
display(H);
cout<<endl;
int
d;
cout<<"please
enter
the
address
of
the
add
member:
";
cin>>d;
LNode
*s;
s=
new
LNode;//初始化局部變數s
cout<<"please
enter
the
data
of
the
add
member:
";
cin>>s->data;
ListInsert(H,d,
s);
display(H);
cout<<endl;
int
p;
cout<<"please
enter
the
address
of
the
delete
member:
";
cin>>p;
int
c=0;
int
&e=c;//非常量引用的初始值必須為左值!!!
ListDelete(H,p,e);
display(H);
cout<<endl;
int
g;
cout<<"please
enter
the
member
that
you
want
to
find:
";
cin>>g;
cout<<"the
local
of
the
member
is:
"<<LocalElem(H,g);
cout<<endl;
InvertLinkedList(H);
cout<<"the
invertlinklist
is:
";
display(H);
cout<<endl;
return
0;
}
花時間好好看看,一定要看懂

『伍』 分別就棧的順序存儲結構和鏈式存儲結構實現棧的各種基本操作。

順序存儲結構

#include<iostream>
typedef char ElemType;
#define MaxSize 100
using namespace std;
typedef struct
{
ElemType data[MaxSize];
int top;
}sqStack;
void InitStack(sqStack *&s);//初始化棧
void ClearStack(sqStack *&s);//摧毀棧
int StackLength(sqStack *s);//返回棧的長度
bool StackEmpty(sqStack *s);//判斷棧是否為空
int Push(sqStack *&s,ElemType e);//進棧
int Pop(sqStack *&s,ElemType &e);//出棧
int GetTop(sqStack *s,ElemType &e);//取棧頂元素
void DispStack(sqStack *s);//顯示棧中元素值
int main()
{

return 0;
}

void InitStack(sqStack *&s)//初始化棧
{
s=new sqStack;
s->top=-1;
}
void ClearStack(sqStack *&s)//摧毀棧
{
delete s;
}

int StackLength(sqStack *s)//返回棧的長度
{
return (s->top+1);
}

bool StackEmpty(sqStack *s)//判斷棧是否為空
{
return (s->top==-1);
}

int Push(sqStack *&s,ElemType e)//進棧
{
if(s->top==MaxSize-1)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}

int Pop(sqStack *&s,ElemType &e)//出棧
{
if(s->top==-1)
return 0;
e=s->data[s->top];
s->top--;
return 1;

}

int GetTop(sqStack *s,ElemType &e)//取棧頂元素
{
if(s->top==-1)
return 0;
e=s->data[s->top];
return 1;
}

void DispStack(sqStack *s)//顯示棧中元素值
{
for(int i=s->top;i>=0;i--)
cout<<s->data[i]<<" ";
cout<<endl;
}

鏈式存儲結構

typedef char ElemType;

typedef struct linknode
{
ElemType data;
struct linknode *next;
}LiStack;
void InitStack(LiStack *&s);//初始化棧
void ClearStack(LiStack *&s);//摧毀棧
int StackLength(LiStack *s);//返回棧的長度
bool StackEmpty(LiStack *s);//判斷棧是否為空
void Push(LiStack *&s,ElemType e);//進棧
int Pop(LiStack *&s,ElemType &e);//出棧
int GetTop(LiStack *s,ElemType &e);//取棧頂元素
void DispStack(LiStack *s);//顯示棧中元素值

int main()
{
return 0;
}

void InitStack(LiStack *&s)//初始化棧
{
s=new LiStack;
s->next=NULL;
}

void ClearStack(LiStack *&s)//摧毀棧
{
for(LiStack *p=s->next;p;p=p->next)
{
delete s;
s=p;
p=p->next;
}
delete s;
}

int StackLength(LiStack *s)//返回棧的長度
{
int i=0;
for(LiStack *p=s->next;p;p=p->next)
i++;
return i;
}

bool StackEmpty(LiStack *s)//判斷棧是否為空
{
return (s->next==NULL);
}

void Push(LiStack *&s,ElemType e)//進棧
{
LiStack *p=new LiStack;
p->data=e;
p->next=s->next;
s->next=p;
}

int Pop(LiStack *&s,ElemType &e)//出棧
{
LiStack *p;
if(s->next==NULL)
return 0;
p=s->next;
e=p->data;
s->next=p->next;
delete p;
return 1;

}
int GetTop(LiStack *s,ElemType &e)//取棧頂元素
{
if(s->next==NULL)
return 0;
e=s->next->data;
return 1;
}
void DispStack(LiStack *s)//顯示棧中元素值
{
LiStack *p=s->next;
for(;p;p=p->next)
cout<<p->data<<" ";
cout<<endl;

}

『陸』 線性表鏈式存儲結構的基本操作演算法實現

這是我學數據結構時親手碼的,好用的話記得給分。。。。。
#include<iostream>
using namespace std;

//線性表的單鏈表存儲表示
struct LNode
{
int data;
struct LNode *next;
};

//逆序創建鏈表
void CreateList(LNode *L,int a[],int n)
{
LNode *s;
L->next = NULL;
for(int i=n-1;i>=0;--i)
{
s= new LNode;
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
//顯示鏈表
void display(LNode *L)
{
LNode *p;
p=L->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
}
//插入結點操作
void ListInsert(LNode *L,int d, LNode *s)
{
LNode *p;
int i=1;
p=L->next;
while(i<d-1)
{
p=p->next;
i++;
}
s->next=p->next;
p->next=s;
}
//刪除節點操作
void ListDelete(LNode *L,int d,int &e)
{
LNode *p,*q;
int i=0;
p=L->next ;
while(i<d-1)
{
q=p;
p=p->next;
i++;
}
e=p->data;
q->next=p->next;
delete p;
}
//查找元素
LNode* LocalElem(LNode *L,int e)
{
LNode *p;
p=L->next;
while(p&&p->data!=e) p=p->next;
return p;
}
//逆置單鏈表
void InvertLinkedList(LNode *L)
{
LNode *p,*s;
p=L->next;
L->next=NULL;
while(p)
{
s=p;
p=p->next;
s->next=L->next;
L->next=s;
}
}

int main()
{
LNode *H;
int n;
cout<<"please enter the length of the list: ";
cin>>n;
int *A=new int[n];
int i;
H=new LNode;
H->next=NULL;
cout<<"please enter "<<n<<" number of the list:"<<endl;
for(i=0;i<n;i++)
cin>>A[i];
CreateList(H,A,n);
cout<<"show the members of the list: ";
display(H);
cout<<endl;

int d;
cout<<"please enter the address of the add member: ";
cin>>d;
LNode *s;
s= new LNode;//初始化局部變數s
cout<<"please enter the data of the add member: ";
cin>>s->data;
ListInsert(H,d, s);
display(H);
cout<<endl;

int p;
cout<<"please enter the address of the delete member: ";
cin>>p;
int c=0;
int &e=c;//非常量引用的初始值必須為左值!!!
ListDelete(H,p,e);
display(H);
cout<<endl;

int g;
cout<<"please enter the member that you want to find: ";
cin>>g;
cout<<"the local of the member is: "<<LocalElem(H,g);
cout<<endl;

InvertLinkedList(H);
cout<<"the invertlinklist is: ";
display(H);
cout<<endl;
return 0;
}

花時間好好看看,一定要看懂

『柒』 線性表的鏈式存儲結構的實現

不錯耶是我想問的 分數給我吧

『捌』 計算機有哪些存儲結構

在計算機中存儲和組織數據的方式被稱之為數據結構,鏈表和數組是較為常見的兩種結構。

1、數組

數組就像一個個緊挨著的小格子,每一個格子都有它們自己的序號,這個序號被稱之為「索引」。與生活中不太相同的是,平時計數習慣以「1」開始,而在計算機中,「0」是開頭的第一個數字。

數組中的數據,在計算機的存儲器中,也是按順序存儲在連續的位置中。當我們尋找需要的數據時,通過格子中的索引,便可以找到數據。

2、鏈表

鏈表的存儲方式有些像地址和住宅的關系,地址可以寫在一張紙上,但是這並不代表住宅也緊密相鄰。鏈表中的數據在計算機中也是分散地存儲在各個地方,但是鏈表裡面除了存儲數據,還存儲了下一個數據的地址,以便於找到下一個數據。

與數組不同的是,鏈表儲存數據不像數組一樣,需要提前設定大小,就像火車的車廂長度是隨著乘客的數量而增加的。

(8)鏈式存儲結構和實現擴展閱讀

數據的鏈式存儲結構可用鏈接表來表示。

其中data表示值域,用來存儲節點的數值部分。Pl,p2,…,Pill(1n≥1)均為指針域,每個指針域為其對應的後繼元素或前驅元素所在結點(以後簡稱為後繼結點或前驅結點)的存儲位置。

通過結點的指針域(又稱為鏈域)可以訪問到對應的後繼結點或前驅結點,若一個結點中的某個指針域不需要指向其他結點,則令它的值為空(NULL)。

在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中。

由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到,訪問任一元素的時間與該元素結點在鏈式存儲結構中的位置有關。

『玖』 數據結構(順序和鏈式存儲結構:對於這兩種存儲結構,都是通過編程實現的,但是是怎樣和計算機內存關聯)

這兩種存儲結構與內存沒有直接的關系,是指的文件在存儲介質上的存儲形式。而順序和鏈式,是為了如何方便查找數據進行修改而產生的兩種思想。比如:鏈式存儲結構,在計算機中用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的),它不要求邏輯上相鄰的元素在物理位置上也相鄰,因此它沒有順序存儲結構所具有的弱點,但也同時失去了順序表可隨機存取的優點;相同空間內假設全存滿的話順序比鏈式存儲更多,邏輯上相鄰的節點物理上不必相鄰,插入、刪除靈活,不必移動節點,只要改變節點中的指針,但查找結點時鏈式存儲要比順序存儲慢。這如同我們的整車庫房,是按來車順序存放呢,還是按同一種類型的車放在一起呢。
內存只是一個臨時存放數據的地方,它的速度與CPU相近,只是在進行硬碟或U盤、光碟等數據操作時才會用到這兩種思想。

『拾』 如何用C語言實現簡單的鏈式存儲結構

使用結構體:

typedefstructnode{
intdata;
structnode*next;
}Node;

就可以實現,以上是一個單鏈表的節點元素,每個節點的next指向下一個節點,就可以實現鏈式存儲了。遇到其他類似的問題,可以根據需要設置相應的指針域。