❶ 鏈式存儲結構和順序存儲結構的區別
區別如下:
1、鏈表存儲結構的內存地址不一定是連續的,但順序存儲結構的內存地址一定是連續的。
2、鏈式存儲適用於在較頻繁地插入、刪除、更新元素是,而順序存儲結構適用於頻繁查詢時使用。
3、順序比鏈式節約空間,是因為鏈式結構每一個節點都有一個指針存儲域。順序支持隨機存取,方便操作。鏈式的要比順序的方便,快捷。
官方一點來說可以使用網路的介紹:順序存儲結構是存儲結構類型中的一種,該結構是把邏輯上相鄰的結點存儲在物理位置上相鄰的存儲單元中,結點之間的邏輯關系由存儲單元的鄰接關系來體現。
當然不得不說一般這種官方的解釋都是不太適合我的,所以用小甲魚的方式來說這個概念的話,簡單來說就是,用一段連續的地址存放數據元素,數據間的邏輯關系和物理關系相同。
優點1:存儲密度大,空間利用度高,比鏈式存儲節約空間。
優點2:存儲操作上方便操作,順序支持隨機存取,查找會比較容易。
缺點1:插入或者刪除元素時不方便,花費的時間更多。
❷ c語言線性表鏈式結構中如何存儲數據
對於LinkList L: L是指向定義的node結構體的指針,可以用->運算符來訪問結構體成員,即L->elem,而(*L)就是個Node型的結構體了,可以用點運算符訪問該結構體成員,即(*L).elem;
對於LinkList *L:L是指向定義的Node結構體指針的指針,所以(*L)是指向Node結構體的指針,可以用->運算符來訪問結構體成員,即(*L)->elem,當然,(**L)就是Node型結構體了,所以可以用點運算符來訪問結構體成員,即(**L).elem;
在鏈表操作中,我們常常要用鏈表變數作物函數的參數,這時,用LinkList L還是LinkList *L就很值得考慮深究了,一個用不好,函數就會出現邏輯錯誤,其准則是:
如果函數會改變指針L的值,而你希望函數結束調用後保存L的值,那你就要用LinkList *L,這樣,向函數傳遞的就是指針的地址,結束調用後,自然就可以去改變指針的值;
而如果函數只會修改指針所指向的內容,而不會更改指針的值,那麼用LinkList L就行了
❸ 關於C語言 數據結構中鏈式結構的問題
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Dian
{
int data;
struct Dian * pnext;
}DIAN,*PDIAN;
void show(PDIAN head)
{
PDIAN p=head->pnext;
while (p)
{
printf("%d ",p->data);
p=p->pnext;
}
}
PDIAN creat_list();
//void traverse_list(PDIAN pHead);
void add_list(PDIAN phead,int val);
void main()
{
PDIAN phead=NULL;
phead=creat_list();
add_list(phead,5);
show(phead);
//traverse_list(phead);
}
PDIAN creat_list()
{
PDIAN phead=(PDIAN)malloc(sizeof(DIAN));
if(phead==NULL)
{
printf("分配內存失敗,程序關閉!\n");
exit(-1);
}
PDIAN pend=(PDIAN)malloc(sizeof(DIAN));
printf("請輸入添加數據:");
scanf("%d",&pend->data);
phead->pnext=pend;
pend->pnext=NULL;
return phead;
}
//往鏈表中添加元素
void add_list(PDIAN phead,int val)
{
PDIAN p=phead;
while(p->pnext!=NULL)
{
p=p->pnext;
}
PDIAN pnew=(PDIAN)malloc(sizeof(DIAN));
if(pnew == NULL)
{
printf("分配內存失敗,程序關閉!\n");
exit(-1);
}
pnew->data=val;
p->pnext=pnew;
pnew->pnext=NULL;
}
❹ 關於C++中的鏈式結構的基本問題(概念)
voidEraseNode(LinkListhead,intx){//刪除值域的num為x的結點
LinkList*q,*p=head;//head有頭結點
while(p->next){//非循環單鏈表的尾結點指向NULL
if(p->next->num==x){
q=p->next;//用q記錄待刪除的結點
p->next=q->next;//表鏈跨過欲刪除的結點
free(q);//實施刪除操作
break;//假設鏈表中各個數據是獨立的
}
p=p->next;
}
}
❺ 鏈式結構是什麼
鏈式結構是為了解決線性結構中間插入數據速度不友好而提出的解決方法,對初始化的數據添加next屬性,使得它指向下一個節點,這樣需要添加數據或者刪除數據(完全刪除,非重置為None)只需要將鏈式結構打斷並重新連接即可實現,不過需要犧牲線性結構的快速查詢性能。
鏈式結構特點:
1、比順序存儲結構的存儲密度小(鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,相比順序存儲結構增加了存儲空間)。
2、邏輯上相鄰的節點物理上不必相鄰。
3、插入、刪除靈活 (不必移動節點,只要改變節點中的指針)。
4、查找節點時鏈式存儲要比順序存儲慢。
5、每個節點是由數據域和指針域組成。
6、由於簇是隨機分配的,這也使數據刪除後覆蓋幾率降低,恢復可能提高。
7、它不要求邏輯上相鄰的元素在物理位置上也相鄰,因此它沒有順序存儲結構所具有的弱點,但也同時失去了順序表可隨機存取的優點。
❻ 鏈式結構的線性表和非線性結構的鏈式結構有什麼分別
鏈式是指元素間通過指針鏈接(關聯),線性是指元素間的邏輯關系(前驅、後繼),比如訪問了,
線性表可以通過鏈連接,樹也一樣,前者是鏈式存儲的線性表,後者是非線性結構的鏈式結構
一個講存儲,一個講邏輯關系
❼ 鏈表的操作(鏈表的建立,訪問,刪除鏈表指定結點,增加結點) C語言
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
typedef struct student
{
char number[10];
float score;
student* next;
}student,*stlink;
void creat(stlink & head)
{
stlink q,p,temp;
if (head==NULL)
{
printf("無學生記錄");
}
else
{
q=head=new student[sizeof(student)];
do
{
printf("請輸入學生學號和分數:");
p=new student[sizeof(student)];
scanf("%s %f",p->number,&p->score);
if(strcmp(p->number,"0")==0 || p->score==0)
{
break;
}
q->next=p;
q=p;
}while(p->score);
q->next=NULL;
}
}
void show(stlink head)
{
stlink p;
p=head->next;
int i=0;
float min=200,max=-1,sum=0,average;
while (p)
{
printf("%s %.1f\n",p->number,p->score);
if (min>p->score) min=p->score;
if (max<p->score) max=p->score;
sum+=p->score;
i++;
p=p->next;
}
average=sum/i;
if(head->next!=NULL)
printf("最小值:%.1f 最大值:%.1f 平均值:%.2f \n",min,max,average);
else
printf("沒有記錄!\n");
}
void dele(stlink& head)
{
stlink p,q;
p=q=head;
char number[20];
printf("請輸入要刪除的學生賬號:");
scanf("%s",number);
while (p->next)
{ q=p;
if(strcmp(p->next->number,number)==0) {p=p->next;break;}
p=p->next;
}
if (q==NULL)
{
printf("沒有找到記錄.\n");
}
else
{
q->next=p->next;
free(p);
}
}
void main()
{
stlink head;
creat(head);
show(head);
while(1)
{
dele(head);
if(head==NULL) printf("沒有記錄!\n");
else
show(head);
}
}
//10分有點少,幫你完成大部分功能。。。其他都是小問題
❽ 非空數據結構可以沒有根結點。 這句話怎麼理解
在數據結構中,凡是樹之外的結構,都可以沒有根節點,如:線性結構,圖,集合,這些非空的數據結構都是沒有根結點的。
資料擴展:
在計算機科學中,數據結構(英語:data structure)是計算機中存儲、組織數據的方式。
數據結構意味著介面或封裝:一個數據結構可被視為兩個函數之間的介面,或者是由數據類型聯合組成的存儲內容的訪問方法封裝。
大多數數據結構都由數列、記錄、可辨識聯合、引用等基本類型構成。舉例而言,可為空的引用(nullable reference)是引用與可辨識聯合的結合體,而最簡單的鏈式結構鏈表則是由記錄與可空引用構成。
數據結構可透過程序語言所提供的數據類型、引用及其他操作加以實現。一個設計良好的數據結構,應該在盡可能使用較少的時間與空間資源的前提下,支持各種程序運行。
❾ 什麼是鏈式存儲結構用自然語言說明向單向鏈表中特定位置插入數據的過程
所謂的鏈式結構是指多個不連續內存空間(C語言鏈表部分稱之為結點),通過從前一個結點中讀取的地址訪問下一個結點,即多個不邊續結點通過指針關聯起來,像一條由數據組成的鏈一樣的數據存儲方式,插入一個數據時可以先申請一個空的內存空間,把它的地址送到插入點前一個結點中的指針部分,該指針部分中原有的地址存到新結點中即可
❿ 為什麼鏈式結構不具有直接讀寫文件任意一個記錄的能力
一個文件刪除後其實並沒有從磁碟中擦除,而是在上面作一個標記,標記為可寫入 文件在磁碟中是按簇存儲的,一個簇如果沒被占滿,則不能再作他用,當一個較小的文件被刪除,然後又有一個更大的文件要存放的時候,原來的簇就不夠用了,要接著用後面空閑的簇 用圖來表示會更清楚一些 圖中每個小方格代表一個簇 圖一中,有三個文件 圖二中,第二個文件被刪除了 圖三中,存放了一個比之前刪除的文件更大的文件