Ⅰ 線性表就是順序存儲的表 這句話對嗎
不對,線性表有順序存儲的,也有鏈式存儲的,書上會有介紹。
Ⅱ 線性表和順序表的區別
線性表僅僅是邏輯上的定義而已,即具有相同特性數據元素的有限序列,(比如一個字元數組或者一個整型數組 再或者鏈表 )並不是說,線性表就一定是鏈表或者順序表(鏈表和順序表都滿足線性表的定義,只是實現方式不一樣,順序表採用順序存儲方式,內存中開辟的地址是連續的,而鏈表採用鏈式存儲的方式,地址是可以不連續的)兩者存儲方式各有優缺點,看情況而定。
下面是數據結構中對於線性表的一段定義與操作
代碼來源線性表--順序表的定義與操作示例
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineMAXSIZE20/*存儲空間初始分配量*/
typedefintElemType;/*ElemType類型根據實際情況而定,這里假設為int*/
typedefstruct
{
ElemTypedata[MAXSIZE];/*數組,存儲數據元素,最大值為MAXSIZE*/
intlength;/*線性表當前長度*/
}SqList;
//順序表的初始化
SqListInit()
{//構造一個空的線性表L,時間復雜度O(1)
SqListL;//定義一個順序表
L.length=0;//順序表的長度為0
returnL;//返回空順序表
}
//順序表的建立
SqListCreate(SqListL)
{
inti;
srand((unsigned)time(NULL));
for(i=0;i<10;i++)
{
L.data[i]=rand()%100;
L.length++;
}
returnL;
}
/*初始條件:順序線性表L已存在,1≤i≤ListLength(L)*/
/*操作結果:用e返回L中第i個數據元素的值,注意i是指位置,第1個位置的數組是從0開始*/
ElemTypeGetElem(SqListL,inti)
{//
if(i<1||i>L.length)
{
printf("查找位置錯誤! ");//檢查查詢位置是否合法
return0;
}
else
returnL.data[i-1];
}
//順序表的插入
SqListSqListInsert(SqListL,inti,ElemTypex)
{//在順序表中的第i個位置插入元素x
if(L.length==MAXSIZE)
printf("表已經滿了 ");//插入時,必須檢查表是否已經滿了。否則會出現溢出錯誤
elseif(i<1||i>L.length)
printf("插入位置錯誤 ");//判斷插入位置的有效性
intj;
for(j=L.length-1;j>=i-1;j--)//第i個位置元素逐個後移
L.data[j+1]=L.data[j];
L.data[i-1]=x;//插入元素x
L.length++;//順序表長度增1
returnL;
}
SqListSqListDelete(SqListL,inti)
{//刪除順序表中的第i個位置的元素
if(i<1||i>L.length)
printf("刪除位置錯誤 ");//檢查刪除位置是否合法
intj;
for(j=i-1;j<L.length;j++)
L.data[j]=L.data[j+1];//將第i個位置之後的元素前移
L.length--;//順序表長度-1
returnL;
}
intmain()
{
SqListnmList;
nmList=Init();
nmList=Create(nmList);
intfind;
intfound;
intpos;
ElemTypevalue;
charopp;
inti;
printf("順序表初始化為:");
for(i=0;i<nmList.length;i++)
{
printf("%d",nmList.data[i]);
}
printf(" 1.查看順序表 2.查找 3.插入 4.刪除 0.退出 請選擇你的操作: ");
while(opp!='0'){
scanf("%c",&opp);
//printf(" 1.查找 2.插入 3.排序 0.退出 請選擇你的操作: ");
switch(opp){
case'1':
printf(" 查看順序表:");
for(i=0;i<nmList.length;i++)
{
printf("%d",nmList.data[i]);
}
printf(" ");
break;
case'2':
printf(" 進入查找功能,請問需要查找第幾個元素:");
scanf("%d",&find);
printf("%d",find);
found=GetElem(nmList,find);
printf("第%d個值為%d",find,found);
printf(" ");
break;
case'3':
printf("進入插入功能,請輸入插入元素位置:");
scanf("%d",&pos);
printf("請輸入插入元素的值:");
scanf("%d",&value);
nmList=SqListInsert(nmList,pos,value);
printf(" 插入元素後順序表為:");
for(i=0;i<nmList.length;i++)
{
printf("%d",nmList.data[i]);
}
printf(" ");
break;
case'4':
printf("進入刪除功能,請輸入刪除元素位置:");
scanf("%d",&pos);
nmList=SqListDelete(nmList,pos);
printf(" 刪除元素後順序表為:");
for(i=0;i<nmList.length;i++)
{
printf("%d",nmList.data[i]);
}
printf(" ");
break;
case'0':
exit(0);
}
}
}
Ⅲ 線性表的順序存儲的缺點
線性順序存儲的缺點:(1)插入或刪除的運算效率很低。在順序存儲的線性表中,插入或刪除數據元素時需要移動大量的數據元素;(2)線性表的順序存儲結構下,線性表的存儲空間不便於擴充;(3)線性表的順序結構不便於對存儲空間的動態分配。
Ⅳ 順序表是線性表的什麼存儲結構
順序表是在計算機內存中以數組的形式保存的線性表,線性表的順序存儲是指用一組地址連續的存儲單元依次存儲線性表中的各個元素、使得線性表中在邏輯結構上相鄰的數據元素存儲在相鄰的物理存儲單元中,即通過數據元素物理存儲的相鄰關系來反映數據元素之間邏輯上的相鄰關系,採用順序存儲結構的線性表通常稱為順序表。順序表是將表中的結點依次存放在計算機內存中一組地址連續的存儲單元中。
Ⅳ 線性表的順序存儲結構是隨機存取的
可以參考下面幾種解釋
1、解釋一:
順序存儲結構的地址在內存中是連續的所以可以通過計算地址實現隨機存取,與此相對 鏈式存儲結構的存儲地址不一定連續,只能通過第個結點的指針順序存取
2、解釋二:
線性表的順序存儲結構可以通過線性表的首址加偏移的方法計算出來第i個數據的位置a+i*sizeof(單個結構)而線性表的鏈式存儲結構要訪問第i個數據,就必須先訪問前面的i-1個數據
(5)線性表順序存儲表擴展閱讀:
線性表主要由順序表示或鏈式表示,在實際應用中,常以棧、隊列、字元串等特殊形式使用,順序表示指的是用一組地址連續的存儲單元依次存儲線性表的數據元素,稱為線性表的順序存儲結構或順序映像,順序存儲結構是隨機存取的。
鏈式表示指的是用一組任意的存儲單元存儲線性表中的數據元素,稱為線性表的鏈式存儲結構。它的存儲單元可以是連續的,也可以是不連續的。
Ⅵ 數據結構之有序線性表的順序存儲結構
指線性表中的元素按值或者關鍵字的大小先後有序(升序或者降序)。
之前講了線性表的順序存儲結構 數據結構之線性表的順序存儲結構
有序線性表是在之前的基礎上構建的,相對於之前的線性表的操作,有序線性表增加了如下操作:
有序線性表的介面SortedList
有序線性表的實現類,實現了SortedList和繼承了SequenceList( 數據結構之線性表的順序存儲結構 )
插入方法
刪除方法
查找方法
測試類
Ⅶ 線性表的順序存儲結構是以什麼來表示數據元素之間的邏輯關系的
線性表是最基本、最簡單、也是最常用的一種數據結構。線性表(linear list)是數據結構的一種,一個線性表是n個具有相同特性的數據元素的有限序列。
線性表主要由順序表示或鏈式表示。在實際應用中,常以棧、隊列、字元串等特殊形式使用。
順序表示指的是用一組地址連續的存儲單元依次存儲線性表的數據元素,稱為線性表的順序存儲結構或順序映像(sequential mapping)。它以「物理位置相鄰」來表示線性表中數據元素間的邏輯關系,可隨機存取表中任一元素。
由此得到的存儲結構為順序存儲結構,通常順序存儲結構是藉助於計算機程序設計語言(例如c/c++)的數組來描述的。
順序存儲結構的主要優點是節省存儲空間,因為分配給數據的存儲單元全用存放結點的數據(不考慮c/c++語言中數組需指定大小的情況),結點之間的邏輯關系沒有佔用額外的存儲空間。
採用這種方法時,可實現對結點的隨機存取,即每一個結點對應一個序號,由該序號可以直接計算出來結點的存儲地址。但順序存儲方法的主要缺點是不便於修改,對結點的插入、刪除運算時,可能要移動一系列的結點。
推薦課程:C語言教程。
線性表順序存儲結構的結構代碼:
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length; // 線性表當前長度
} SqList;
順序存儲結構封裝需要三個屬性:
存儲空間的起始位置,數組data,它的存儲位置就是線性表存儲空間的存儲位置。
線性表的最大存儲容量:數組的長度MaxSize。
線性表的當前長度:length。
注意:數組的長度與線性表的當前長度需要區分一下:數組的長度是存放線性表的存儲空間的總長度,一般初始化後不變。而線性表的當前長度是線性表中元素的個數,是會變化的。
線性表順序存儲結構的優缺點
線性表的順序存儲結構,在存、讀數據時,不管是哪個位置,時間復雜度都是O(1)。而在插入或刪除時,時間復雜度都是O(n)。
這就說明,它比較適合元素個數比較穩定,不經常插上和刪除元素,而更多的操作是存取數據的應用。
優點:
無須為表示表中元素之間的邏輯關系而增加額外的存儲空間。
可以快速地存取表中任意位置的元素。
缺點:
插上和刪除操作需要移動大量元素。
當線性表長度變化較大時,難以確定存儲空間的容量。
容易造成存儲空間的「碎片」
Ⅷ 順序存儲的有序線性表 有序線性鏈表
「順序存儲」表明該線性表使用順序存儲結構(即數組)
「有序」表明線性表內元素排列有序,如「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;