鏈式存儲計算
㈠ 線性表的鏈式存儲結構是一種()存儲結構
線性表的鏈式存儲結構是一種順序存儲的存儲結構。
線性表的鏈式存儲結構中的每一個存儲結點不僅含有一個數據元素,還包括指針,每一個指針指向一個與本結點有邏輯關系的結點,此類存儲方式屬於順序存儲;線性表是最基本、最簡單、也是最常用的一種數據結構。線性表(linear list)是數據結構的一種,一個線性表是n個具有相同特性的數據元素的有限序列。
(1)鏈式存儲計算擴展閱讀:
線性表中數據元素之間的關系是一對一的關系,即除了第一個和最後一個數據元素之外,其它數據元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部。
比如,循環鏈表邏輯層次上也是一種線性表(存儲層次上屬於鏈式存儲,但是把最後一個數據元素的尾指針指向了首位結點)。
㈡ 線性表的順序存儲結構是隨機存取的
可以參考下面幾種解釋
1、解釋一:
順序存儲結構的地址在內存中是連續的所以可以通過計算地址實現隨機存取,與此相對 鏈式存儲結構的存儲地址不一定連續,只能通過第個結點的指針順序存取
2、解釋二:
線性表的順序存儲結構可以通過線性表的首址加偏移的方法計算出來第i個數據的位置a+i*sizeof(單個結構)而線性表的鏈式存儲結構要訪問第i個數據,就必須先訪問前面的i-1個數據
(2)鏈式存儲計算擴展閱讀:
線性表主要由順序表示或鏈式表示,在實際應用中,常以棧、隊列、字元串等特殊形式使用,順序表示指的是用一組地址連續的存儲單元依次存儲線性表的數據元素,稱為線性表的順序存儲結構或順序映像,順序存儲結構是隨機存取的。
鏈式表示指的是用一組任意的存儲單元存儲線性表中的數據元素,稱為線性表的鏈式存儲結構。它的存儲單元可以是連續的,也可以是不連續的。
㈢ 雙鏈表的存儲密度是多少
存儲密度,在計算機中是指結點數據本身所佔的存儲量和整個結點結構所佔的存儲量之比,計算公式:存儲密度 = (結點數據本身所佔的存儲量)/(結點結構所佔的存儲總量)。
這里的結構一般指的是數據結構,主要通過計算機中數據的存儲結構來影響存儲密度。
在數據結構中,存儲密度:結點數據本身所佔的存儲量和整個結點結構所佔的存儲量之比。
存儲密度 = (結點數據本身所佔的存儲量)/(結點結構所佔的存儲總量)
在數據結構中,數據元素是數據的基本單位,一般將數據元素定義為一個結點,在結點中包含的有數據部分和非數據部分,比如鏈表中的指針,存儲密度是衡量數據對存儲空間利用率的指標,即一個數據元素存儲單元中數據所佔空間與這個數據元素存儲空間的百分比。
㈣ 數據結構(c語言)用單鏈表存儲一元多項式,並實現兩個多項式的相加運算,怎麼做
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
/*單項鏈表的聲明*/
typedef struct PolynNode{
int coef; // 系數
int expn; // 指數
struct PolynNode *next; }PolynNode,*PolynList;
/*正位序(插在表尾)輸入n個元素的值,建立帶表頭結構的單鏈線性表*/
/*指數系數一對一對輸入*/ void CreatePolyn(PolynList &L,int n)
{
int i;
下載
原文檔已轉碼為如下格式,以便移動設備查看
數據結構(c語言)用單鏈表存儲一元多項式,並實現兩個多項式的相加運算【最新】
閱讀:1037次 頁數:36頁 2016-03-21 舉報
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
/*單項鏈表的聲明*/
typedef struct PolynNode{
int coef; // 系數
int expn; // 指數
struct PolynNode *next; }PolynNode,*PolynList;
/*正位序(插在表尾)輸入n個元素的值,建立帶表頭結構的單鏈線性表*/
/*指數系數一對一對輸入*/ void CreatePolyn(PolynList &L,int n)
{
int i;
PolynList p,q;
L=(PolynList)malloc(sizeof(PolynNode)); // 生成頭結點
L->next=NULL;
q=L;
printf("成對輸入%d個數據 ",n);
for(i=1;i<=n;i++)
{
p=(PolynList)malloc(sizeof(PolynNode));
scanf("%d%d",&p->coef,&p->expn); //指數和系數成對輸入
q->next=p;
q=q->next;
}
p->next=NULL;
}
// 初始條件:單鏈表L已存在
// 操作結果: 依次對L的每個數據元素調用函數vi()。一旦vi()失敗,則操作失敗
void PolynTraverse(PolynList L,void(*vi)(ElemType, ElemType)) {
PolynList p=L->next;
while(p)
{
vi(p->coef, p->expn);
if(p->next)
{
printf(" + "); //「+」號的輸出,最後一項後面沒有「+」
}
p=p->next;
}
printf(" ");
}
/*ListTraverse()調用的函數(類型要一致)*/ void visit(ElemType c, ElemType e) {
if(c != 0)
{
printf("%dX^%d",c,e); //格式化輸出多項式每一項
}
}
/* 多項式相加,原理:歸並 */ /* 參數:兩個已經存在的多項式 */ /* 返回值:歸並後新的多項式的頭結點 */
PolynList MergeList(PolynList La, PolynList Lb) {
PolynList pa, pb, pc, Lc;
pa = La->next;
pb = Lb->next;
Lc = pc = La; // 用La的頭結點作為Lc的頭結點
while(pa&&pb)
{
if(pa->expn < pb->expn)
{
pc->next = pa; //如果指數不相等,pc指針連上指數小的結
點,
pc = pa;
pa = pa->next; //指向該結點的指針後移
}
else if (pa ->expn > pb->expn )
{
pc->next = pb; //pc指針連上指數小的結點,
pc = pb;
pb = pb->next; //指向該結點的指針後移
}
else //(pa ->expn = pb->expn )
{
pa->coef = pa->coef + pb->coef; //指數相等時,系數相加
pc->next = pa;
pc = pa;
pa = pa->next; //兩指針都往後移
pb = pb->next;
}
}
pc->next = pa ? pa:pb; // 插入剩餘段
return Lc;
}
void main()
{
PolynList ha,hb,hc;
printf("非遞減輸入多項式ha, ");
CreatePolyn(ha,5); // 正位序輸入n個元素的值
printf("非遞減輸入多項式hb, ");
CreatePolyn(hb,5); // 正位序輸入n個元素的值