當前位置:首頁 » 服務存儲 » 順序存儲結構插入刪除
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

順序存儲結構插入刪除

發布時間: 2022-06-25 15:44:52

㈠ 關於順序存儲結構線性表的插入與刪除

printf("輸出原線性表:%d\n",PrintList(L,10)); 錯誤,PrintList沒有返回值(int)

ElemType InsertSList(...)》》》int InsertSList(...)

int DeleteSList(int *L,int n,int i)中
return(y); 》》》return 1;

看看你的定義:
void PrintList(int *L,int n,int i);
int InsertSList(int *L,int n,int i,int x);
ElemType DeleteSList(int *L,int n,int i);
與實現 type 不同....

㈡ 為什麼說在順序存儲結構下,棧的插入和刪除運算不需移動表中其他數據元素

棧的插入(入棧)和刪除(出棧)運算,都是在棧的同一端進行。所以在順序存儲結構下,棧的入棧與出棧只需移動棧頂指針即可。
如用數組表示棧時,設a[]表示棧,top表示棧頂,x表示欲入(出)棧的元素,則入棧只需:a[top]=x;;top++,出棧只需:top--;x=a[top]。
如用鏈表表示棧,對於不使用頭結點的情形,入棧和出棧時也不需要移動表中其他數據元素;對於使用頭結點的情形,入棧和出棧時需要修改頭結點的指針。

㈢ 順序存儲結構線性表的插入與刪除演算法

你想問?

㈣ 順序表的基本操作中,插入和刪除是如何實現的

順序表的插入和刪除就好比排隊:
中間有人插隊,後面的人就統一退一步;
中間有人走了,後面的人就一起進一步。
鏈式表就好比向上級匯報工作,每個人只需要關心自己向誰報告就可以了,比如現在只有村長、市長、省長,就是村長向市長報告,市長向生長報告:
如果插進來一個縣長,那麼村長就向縣長報告就可以了,市長那兒由縣長報告;
如果市被撤了,那麼向省長報告的人就是村長啦,哈哈

㈤ 為什麼在順序存儲結構下,棧的插入和刪除運算都不需要移動表中其他數據元素,如果在鏈式存儲結構下會怎樣

棧也被叫做"先進後出表",正是由於這種性質,讓它可以不需要移動元素實現插入和刪除.
棧的插入,其實就是壓棧,它是被嚴格限制在棧頂進行的.由於棧頂也是表中最後一個元素,所以壓棧也就相當於是在順序表的最後追加一個元素,這顯然不影響前面的元素,也就無需移動其他元素了.
刪除也是同樣的道理,彈棧(刪除操作)也是被嚴格限制在棧頂進行,這時候刪除一個元素只需要在順序表中去除最後一個元素,自然也不影響之前的元素.

鏈式結構對於棧來說,同樣不需要作任何其他元素的移動.事實上,鏈式結構的刪除和插入操作本身就不需要移動其他元素,無論是對於棧來說還是對於一般的鏈表.

㈥ 順序表的插入與刪除的時間主要花在什麼操作上

順序表的插入和刪除操作的時間主要耗費在移動元素上,而移動元素的個數取決於插入和刪除元素的位置。

最好情況:查找的元素就在表頭,僅需比較一次,時間復雜度為O(1)。

最壞情況:查找的元素在表尾(或不存在)時,需要比較n次,時間復雜度為O(n)。

順序表是在計算機內存中以數組的形式保存的線性表,線性表的順序存儲是指用一組地址連續的存儲單元依次存儲線性表中的各個元素、使得線性表中在邏輯結構上相鄰的數據元素存儲在相鄰的物理存儲單元中。

即通過數據元素物理存儲的相鄰關系來反映數據元素之間邏輯上的相鄰關系,採用順序存儲結構的線性表通常稱為順序表。順序表是將表中的結點依次存放在計算機內存中一組地址連續的存儲單元中。

順序表簡介:

將表中元素一個接一個的存入一組連續的存儲單元中,這種存儲結構是順序結構。

採用順序存儲結構的線性表簡稱為「 順序表」。順序表的存儲特點是:只要確定了起始位置,表中任一元素的地址都通過下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素佔用存儲單元的長度。



㈦ 假設線性表採用順序表為存儲結構,其插入與刪除在什麼位置最快

都是在末尾插入和刪除最快
如果插入在中間甚至在表頭,那樣要後移插入位置後面的所有結點一個單位,而如果是在表尾插入的話,只需要直接添加一個結點即可。
刪除同理,如果我們是在中間刪除,要將刪除位置後面的結點都前移一個單位,而如果是在表尾刪除的話,只需要將最後一個刪除點即可。
順序存儲結構最耗時的是移動結點的操作。

㈧ 如何建立一個順序存儲的線性表,實現線性表的插入、刪除操作

順序存儲結構線性表基本操作 C語言實現

#include<stdio.h>
//以下為函數運行結果狀態代碼
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineLIST_INIT_SIZE100//線性表存儲空間的初始分配量
#defineLISTINCREMENT10//線性表存儲空間分配增量
typedefintStatus;//函數類型,其值為為函數結果狀態代碼
typedefintElemType;//假設數據元素為整型
typedefstruct
{
ElemType*elem;//存儲空間基址
intlength;//當前長度
intlistsize;//當前分配的存儲容量
}SqList;
//實現線性表的順序存儲結構的類型定義
//函數聲明開始
StatusInitList_Sq(SqList&L);
voidDestroyList_Sq(SqList&L);
voidClearList_Sq(SqList&L);
voidListEmpty_Sq(SqListL);
StatusGetElem_Sq(SqListL,i,&e);
intLocateElem_Sq(SqListL,e,compare());
StatusPriorElem_Sq(SqListL,cur_e,&pre_e);
StatusNextElem_Sq(SqListL,cur_e,&next_e);
StatusListInsert_Sq(SqList&L,i,e);
StatusListDelete_Sq(SqList&L,i,&e);
ListTravel_Sq(SqListL,visit());
//函數聲明結束
intmain(void)
{
return0;
}
//函數定義開始
///////////////////////////////////////
//函數名:InitList_Sq()
//參數:SqList*L
//初始條件:無
//功能:構造一個空線性表
//返回值:存儲分配失敗:OVERFLOW
//存儲分配成功:OK
///////////////////////////////////////
StatusInitList_Sq(SqList*L)
{
L.elem=(ElemType*)malloc((LIST_INIT_SIZE*sizeof(ElemType));//分配空間
if(!L.elem)
exit(OVERFLOW);//若存儲分配失敗,返回OVERFLOW
L.length=0;//空表,長度為0
L.listsize=LIST_INIT_SIZE;//初始存儲容量
returnOK;
}
///////////////////////////////////////
//函數名:DestroyList_Sq()
//參數:SqList*L
//初始條件:線性表L已存在
//功能:銷毀線性表
//返回值:無
///////////////////////////////////////
voidDestroyList_Sq(SqList*L)
{
if(L->elem)
free(L->elem);//釋放線性表占據的所有存儲空間
}
///////////////////////////////////////
//函數名:ClearList_Sq()
//參數:SqList*L
//初始條件:線性表L已存在
//功能:清空線性表
//返回值:無
///////////////////////////////////////
voidClearList_Sq(SqList*L)
{
L->length=0;//將線性表的長度置為0
}
///////////////////////////////////////
//函數名:ListEmpty_Sq()
//參數:SqListL
//初始條件:線性表L已存在
//功能:判斷線性表是否為空
//返回值:空:TRUE
//非空:FALSE
///////////////////////////////////////
StatusListEmpty_Sq(SqListL)
{
if(L.length==0)
returnTRUE;
else
returnFALSE;
}
///////////////////////////////////////
//函數名:ListLength_Sq()
//參數:SqListL
//初始條件:線性表L已存在
//功能:返回線性表長度
//返回值:線性表長度(L.length)
///////////////////////////////////////
StatusListLength_Sq(SqListL)
{
return(L.length);
}
///////////////////////////////////////
//函數名:GetElem_Sq()
//參數:SqListL,inti,ElemType*e
//初始條件:線性表L已存在,1<=i<=ListLength(L)
//功能:用e返回線性表中第i個元素的值
//返回值:(i<1)||(i>ListLength(L)):ERROR
//1<=i<=ListLength(L):OK
///////////////////////////////////////
StatusGetElem_Sq(SqListL,inti,ElemType*e)
{
if(i<1||i>L.length)
returnERROR;//判斷i值是否合理,若不合理,返回ERROR
*e=L.elem[i-1];//數組中第i-1的單元存儲著線性表中第i個數據元素的內容
returnOK;
}
///////////////////////////////////////
//函數名:LocateElem_Sq()
//參數:L,e,compare(ElemType1,ElemType2)
//初始條件:線性表L已存在,compare()為數據元素判定函數
//功能:返回順序表L中第1個與e滿足關系compare()的數據元素的位序
//返回值:若在L中存在於e滿足關系compare()的元素:其位序
//若在L中不存在於e滿足關系compare()的元素:0
///////////////////////////////////////
intLocateElem_Sq(SqListL,e,compare(ElemType1,ElemType2))
{
inti=1;//i的初值為第1元素的位序
intp=L.elem;//p的初值為第1元素的存儲位置
while(i<=L.length&&!(*compare)(*p++,e))
++i;//依次進行判定
if(i<=L.length)
returni;//找到滿足判定條件的數據元素為第i個元素
else
return0;//該線性表中不存在滿足判定的數據元素
}
StatusPriorElem_Sq(SqListL,cur_e,&pre_e);
//見StatusNextElem_Sq(SqListL,cur_e,&next_e);
StatusNextElem_Sq(SqListL,cur_e,&next_e);
//我的思路是先用LocateElem_Sq()搜索cur_e的位序,
//再看是否大於等於length,
//若是,則返回OVERFLOW;否則返回後繼
//這樣也許有點麻煩?所以希望大家能夠補充方案
//bywangweinoo1
///////////////////////////////////////
//函數名:ListInsert_Sq()
//參數:SqList*L,inti,ElemTypee
//初始條件:線性表L已存在,1<=i<=ListLength(L)+1
//功能:在線性表中第i個數據元素之前插入數據元素e
//返回值:失敗:ERROR
//成功:OK
///////////////////////////////////////
StatusListInsert_Sq(SqList*L,inti,ElemTypee)
{
ElemType*j;
if(L->length==LIST_MAX_LENGTH)
returnERROR;//檢查是否有剩餘空間
if(i<1||i>L->length+1)
returnERROR;//檢查i值是否合理
//將線性表第i個元素之後的所有元素向後移動
for(j=L->length-1;j>=i-1;i++)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;//將新元素的內容放入線性表的第i個位置,
L->length++;
returnOK;
}
///////////////////////////////////////
//函數名:ListDelete_Sq()
//參數:SqList*L,inti,Elemtype*e
//初始條件:線性表L已存在,1<=i<=ListLength(L)
//功能:將線性表L中第i個數據元素刪除
//返回值:失敗:ERROR
//成功:OK
///////////////////////////////////////
intListDelete_Sq(SqList*L,inti,Elemtype*e)
{
if(IsEmpty(L))
returnERROR;//檢測線性表是否為空
if(i<1||i>L->length)
returnERROR;//檢查i值是否合理
*e=L->elem[i-1];//將欲刪除的數據元素內容保留在e所指示的存儲單元中
//將線性表第i+1個元素之後的所有元素向前移動
for(j=i;j<=L->length-1;j++)L->elem[j-1]=L->elem[j];
L->length--;
returnOK;
}
//函數定義結束