① 順序存儲的有序線性表 有序線性鏈表
「順序存儲」表明該線性表使用順序存儲結構(即數組)
「有序」表明線性表內元素排列有序,如「1,2,3,4,5」
「鏈表」表明該線性表採用鏈式存儲結構,即每個元素的數據類型都是一個結構體,這個結構體裡面又包含指向下一個位置的結構體的地址
順序存儲結構的線性表的類型定義如下:
#define
MAXSIZE
100
‖順序表的最大容量
typedef
struct
{ElemType
data[MAXSIZE];
‖存放線性表的數組
int
last;
‖last是線性表的長度
}SeqList;
鏈式存儲線性表的結點定義:
typedef
struct
Node
{ElemType
data;
struct
Node
*next;
}LNode,*LinkedList;
② C語言數據結構,堆用順序表儲存怎麼存,假設用我圖片的這個堆。
對這個堆從上到下,逐層從左到右,從0開始編號,然後按序號存儲到一維數組里就行了。
③ 數據結構:有序表和順序表不一樣嗎
有序表和順序表不一樣。
有序表中的「有序」是邏輯意義上的有序,指表中的元素按某種規則已經排好了位置。順序表中的「順序」是物理意義上的,指線形表中的元素一個接一個的存儲在一片相鄰的存儲區域中。
數據結構在計算機中的表示稱為數據的物理結構。它包括數據元素的表示和關系的表示。數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。
順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現。順序存儲結構通常藉助於程序設計語言中的數組來實現。
鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。
(3)順序存儲的有序表圖片擴展閱讀:
順序存儲結構的優缺點:
順序存儲結構優點是可以節省存儲空間,因為分配給數據的存儲單元全用存放結點的數據,結點之間的邏輯關系沒有佔用額外的存儲空間。
採用這種方法時,可實現對結點的隨機存取,即每一個結點對應一個序號,由該序號可以直接計算出來結點的存儲地址。
但順序存儲方法的主要缺點是不便於修改,對結點的插入、刪除運算時,可能要移動一系列的結點。
順序存儲結構----網路
④ 線性表的順序存儲結構和線性表的鏈式存儲結構分別是
您好,
這道題的答案是B
首先解題需要了解線性表的定義,順序存儲結構和鏈式存儲結構的區別,他們分別如下:
資料擴展
定義:線性表(Linear List)是由n(n≥0)個數據元素(結點)a[0],a[1],a[2]…,a[n-1]組成的有限序列。
對於線性表而言,有如下幾點需要明確:
①數據元素的個數n定義為表的長度 = "list".length() ("list".length() = 0(表裡沒有一個元素)時稱為空表)
②將非空的線性表(n>=0)記作:(a[0],a[1],a[2],…,a[n-1])
③數據元素a[i](0≤i≤n-1)只是個抽象符號,其具體含義在不同情況下可以不同,一個數據元素可以由若干個數據項組成。數據元素稱為記錄,含有大量記錄的線性表又稱為文件。這種結構具有下列特點:存在一個唯一的沒有前驅的(頭)數據元素;存在一個唯一的沒有後繼的(尾)數據元素;此外,每一個數據元素均有一個直接前驅和一個直接後繼數據元素。
綜上所述,這道題目選擇B項。
⑤ 將兩個順序存儲的有序表合並成一個有序表
將兩個順序存儲的有序表合並成一個有序表的代碼如下:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MaxSize 50
typedef struct
{
int data[MaxSize];
int length;
}SqList;
void ListInsert(SqList *L,int i,int e)
{
int j;
if(i<1||i>L->length+1)
exit(-1);
if(L->length>=MaxSize)
exit(-1);
for(j=L->length;j>=i;j--)
L->data[j]=L->data[j-1];
L->data[i-1]=e;
L->length++;
}
void DispList(SqList *L)
{
int i;
for(i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("
");
}
void Exchange(SqList *A,SqList *B,SqList *C)
{
int i=0,j=0,k=0;
while(i<A->length&&j<B->length)
{
if(A->data[i]<B->data[j])
C->data[k++]=A->data[i++];
else if(A->data[i]>B->data[j])
C->data[k++]=B->data[j++];
}
while(i<A->length)
C->data[k++]=A->data[i++];
while(j<B->length)
C->data[k++]=B->data[j++];
C->length=k;
}
void main()
{
SqList *A,*B,*C;
A=(SqList*)malloc(sizeof(SqList));
A->length=0;
B=(SqList*)malloc(sizeof(SqList));
B->length=0;
C=(SqList*)malloc(sizeof(SqList));
C->length=0;
ListInsert(A,1,1);
ListInsert(A,2,3);
ListInsert(A,3,5);
ListInsert(A,4,7);
ListInsert(A,5,9);
ListInsert(B,1,2);
ListInsert(B,2,4);
ListInsert(B,3,6);
ListInsert(B,4,8);
ListInsert(B,5,10);
ListInsert(B,6,12);
Exchange(A,B,C);
printf("順序表A:");
DispList(A);
printf("順序表B:");
DispList(B);
printf("順序表C:");
DispList(C);
}
(5)順序存儲的有序表圖片擴展閱讀:
第二種解法的核心代碼
bool Merge(SeqList A, SeqList B, SeqList &C)
{//C為合並後的順序表
if (A.length + B.length > C.MaxSize) return false;//超出最大存儲空間
int i = 0, j = 0, k = 0;
while( i < A.length && j < B.length)
{
if (A.data[i] <= B.data[j])
C.data[k++] = A.data[i++];
else
C.data[k++] = B.data[j++];
}
while (i < A.length) C.data[k++] = A.data[i++];
while (j < B.length) C.data[k++] = B.data[j++];
C.length = k;
return true;
}
⑥ 對於長度為18的順序存儲的有序表,若採用折半查找,則比較4次就能查找的元素共有幾
等概率下,折半查找的平均查找長度公式為:ASL={[(n+1)/n]*log2^(n+1)}-1。
折半查找原碼是:
if (key==r[mid]) return mid;
else if(key>r[mid]) low = mid+1;
else(key<r[mid]) high = mid-1;
第一次和37比較,第二次和12比較,第三次和20比較,第四次和26比較,所以是4次。
(6)順序存儲的有序表圖片擴展閱讀:
折半查找法:
假設有已經按照從小到大的順序排列好的五個整數a0~a4,要查找的數是X,其基本思想是: 設查找數據的范圍下限為l=0,上限為h=4,求中點m=(l+h)/2,用X與中點元素am比較,若X等於am,即找到,停止查找;
否則,若X大於am,替換下限l=m+1,到下半段繼續查找;若X小於am,換上限h=m-1,到上半段繼續查找;如此重復前面的過程直到找到或者l>h為止。如果l>h,說明沒有此數,列印找不到信息,程序結束。
⑦ 有序順序表和順序表的區別
順序表是指 數據在存儲位置上相鄰,但數據值不一定遞增或遞減
有序順序表就是數據值遞增或遞減的順序表
⑧ 怎麼將兩個順序存儲的有序表合並成一個有序表
具體代碼如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX 40
typedef struct
{
int data[MAX];
int length;
}LinkList;
void Initial_List(LinkList * &l,int n)//初始化順序表
{
int i=0;
l=(LinkList *)malloc(sizeof(LinkList));
l->length = 0;
for(;i<n;i++)
scanf("%d",l->data+i);
l->length = n;
}
void Link(LinkList *l1,LinkList *l2,LinkList * &l3)//連接順序表
{
int i,j;
l3=(LinkList *)malloc(sizeof(LinkList));
l3->length = l1->length + l2->length;
for(i=0;i<l3->length;i++)
{
if(i<l1->length)
{
l3->data[i] = l1->data[i];
}
else
{
l3->data[i] = l2->data[i%(l1->length)];
}
}
for(i=0;i<l3->length;i++)
{
for(j=i+1;j<l3->length;j++)
{
if(l3->data[i]>l3->data[j])
{
int temp=l3->data[i];
l3->data[i]=l3->data[j];
l3->data[j]=temp;
}
}
}
}
void Disp_List(LinkList *l)
{
int i=0;
printf("output: ");
for(;i<l->length;i++)
printf("%d ",l->data[i]);
printf(" ");
}
int main()
{
LinkList *l1,*l2,*l3;
int n;
printf("請輸入第一個序列的元素個數: ");
scanf("%d",&n);
printf("請輸入第一個序列的所有元素: ");
Initial_List(l1,n);
printf("請輸入第二個序列的元素個數: ");
scanf("%d",&n);
printf("請輸入第二個序列的所有元素: ");
Initial_List(l2,n);
Link(l1,l2,l3);
Disp_List(l3);
return 0;
}
⑨ 線性表順序存儲結構不是要求數據元素是按照邏輯順序存放的嗎,為什麼下面這個圖數字不是按照大小順序存放
順序存儲指的是數據在內存中的存放方式,而不是排序方式,它與鏈式存儲相對。
數據在內存的一片連續區域中依次相鄰存放則稱為順序存儲;數據在內存中分散存放,每個結點除了保存數據外,還保存下個結點的地址信息則稱為鏈式存儲。
數據按照由小到大或是由大到小的方式排列屬於數據的排序方式。
⑩ 順序和鏈式存儲結構哪個能存儲有序表
覺得順序存儲結構和鏈式存儲結構都可以存儲有序表。順序存儲結構可以預先預留一定空間(如一維數組),鏈表存儲結構比較靈活,可以動態開辟空間,需要時增加。要用哪種存儲結構要看你的有序表要進行什麼操作了。