資料結構:線性表的順序實現2.2
對於一個線性表如果我們使用順序的實現,那麼在insert或者delete一個值的時候最壞漸進時間複雜度
趨近於資料的規模n及
f(n)=O(n);
可以看到這個時候代價比較高,所以我們一般使用鏈試實現,關於這個演算法我用C語言進行如下實現。
當使用鏈試實現的時候代替 時間複雜度為O(1) 出於演示並沒有寫free 釋放記憶體
但是我們也可以想到關於固定位置的元素查詢順序實現其時間複雜度為O(1),而連結串列結構則為O(n)
執行如下:
gaopeng@bogon:~/datas/part2$ ./a.out
insert two values
node:0 values is:10 data length:2 max_size:10
node:1 values is:5 data length:2 max_size:10
delete one values
node:0 values is:10 data length:1 max_size:10
insert more than 10 values
node:0 values is:10 data length:12 max_size:20
node:1 values is:10 data length:12 max_size:20
node:2 values is:10 data length:12 max_size:20
node:3 values is:10 data length:12 max_size:20
node:4 values is:10 data length:12 max_size:20
node:5 values is:10 data length:12 max_size:20
node:6 values is:50 data length:12 max_size:20
node:7 values is:40 data length:12 max_size:20
node:8 values is:30 data length:12 max_size:20
node:9 values is:20 data length:12 max_size:20
node:10 values is:10 data length:12 max_size:20
node:11 values is:10 data length:12 max_size:20
上圖演示的是刪除data3的方式。插入相反
趨近於資料的規模n及
f(n)=O(n);
可以看到這個時候代價比較高,所以我們一般使用鏈試實現,關於這個演算法我用C語言進行如下實現。
當使用鏈試實現的時候代替 時間複雜度為O(1) 出於演示並沒有寫free 釋放記憶體
但是我們也可以想到關於固定位置的元素查詢順序實現其時間複雜度為O(1),而連結串列結構則為O(n)
點選(此處)摺疊或開啟
-
/*************************************************************************
-
> File Name: sqlist.c
-
> Author: gaopeng
-
> Mail: gaopp_200217@163.com
-
> Created Time: Tue 04 Oct 2016 09:12:11 PM CST
-
************************************************************************/
-
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<string.h>
-
#define INITSIZE 10
-
-
typedef unsigned int uint;
-
typedef int Etype;
-
-
typedef struct sqlist
-
{
-
Etype* elem; //pointer of sqlist base address
-
uint length; //current length of elem
-
uint m_size; //
-
} SQLIST;
-
-
-
-
void initsqlist(SQLIST* inlist)
-
{
-
inlist->elem = (Etype* )malloc(sizeof(Etype)*(INITSIZE+2) + 1);
-
inlist->length = 0;
-
inlist->m_size = INITSIZE; //maxsize
-
}
-
-
-
void initsqlinsert(SQLIST* inlist,Etype ielem,uint postion) //insert elem before postion
-
{
-
int i;
-
Etype* newbase;
-
if(postion > inlist->length + 1 || postion < 1)
-
{
-
printf("line table must continuous or postion must>0!\n");
-
exit(1);
-
}
-
-
if(inlist->length + 1 >= inlist->m_size ) //if memory small will give more memory
-
{
-
if(!(newbase =(Etype* )realloc(inlist->elem,(inlist->length+INITSIZE+2)* sizeof(Etype)+1)))
-
{
-
printf("mem alloc failed!\n");
-
exit(2);
-
}
-
inlist->elem = newbase;
-
inlist->m_size = inlist->m_size+INITSIZE;
-
}
-
-
for(i=0;i<(inlist->length-postion+2);i++) //every elem +1
-
{
-
*(inlist->elem+inlist->length+1-i) = * (inlist->elem+inlist->length-i);
-
}
-
*(inlist->elem+inlist->length+1-i) = ielem; //give value
-
inlist->length =inlist->length+1;
-
}
-
- void delsqldel(SQLIST* inlist,uint postion) //delete elem of postion every elem -1
-
int i;
-
if((postion > inlist->length) ||(postion <1))
-
{
-
printf("give postion is must large than 1 and less than current length\n");
-
}
-
-
for(i=0;i<(inlist->length-postion) ;i++)
-
{
-
*(inlist->elem+postion+i) = *(inlist->elem+postion+i+1);
-
}
-
inlist->length =inlist->length-1;
-
}
-
-
void view(SQLIST* inlist)
-
{
-
int i;
-
if(inlist->length ==0 )
-
{
-
printf("init data arrary! no data found!\n");
-
exit(3);
-
}
-
for(i=0;i<inlist->length;i++)
-
{
-
printf("node:%d values is:%d data length:%d max_size:%d \n",i,*(inlist->elem+i),inlist->length,inlist->m_size);
-
}
-
}
-
-
-
int main(void)
-
{
-
SQLIST a;
-
initsqlist(&a);
-
printf("insert two values\n");
-
initsqlinsert(&a,5,1);
-
initsqlinsert(&a,10,1);
-
view(&a);
-
-
printf("delete one values\n");
-
delsqldel(&a,2);
-
-
view(&a);
-
-
printf("insert more than 10 values\n");
-
initsqlinsert(&a,10,1);
-
initsqlinsert(&a,20,1);
-
initsqlinsert(&a,30,1);
-
initsqlinsert(&a,40,1);
-
initsqlinsert(&a,50,1);
-
initsqlinsert(&a,10,1);
-
initsqlinsert(&a,10,1);
-
initsqlinsert(&a,10,1);
-
initsqlinsert(&a,10,1);
-
initsqlinsert(&a,10,1);
-
initsqlinsert(&a,10,1);
-
view(&a);
-
-
-
return 0;
- }
執行如下:
gaopeng@bogon:~/datas/part2$ ./a.out
insert two values
node:0 values is:10 data length:2 max_size:10
node:1 values is:5 data length:2 max_size:10
delete one values
node:0 values is:10 data length:1 max_size:10
insert more than 10 values
node:0 values is:10 data length:12 max_size:20
node:1 values is:10 data length:12 max_size:20
node:2 values is:10 data length:12 max_size:20
node:3 values is:10 data length:12 max_size:20
node:4 values is:10 data length:12 max_size:20
node:5 values is:10 data length:12 max_size:20
node:6 values is:50 data length:12 max_size:20
node:7 values is:40 data length:12 max_size:20
node:8 values is:30 data length:12 max_size:20
node:9 values is:20 data length:12 max_size:20
node:10 values is:10 data length:12 max_size:20
node:11 values is:10 data length:12 max_size:20
上圖演示的是刪除data3的方式。插入相反
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2124937/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料結構 - 線性表 - 順序表資料結構
- 考研資料結構-線性表-順序表資料結構
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 【資料結構】實現順序表(c++)資料結構C++
- 線性表的使用——順序實現
- 【資料結構】實現順序表(c語言)資料結構C語言
- 11 線性表的順序儲存結構
- 線性表之順序儲存結構
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 線性表-順序表C語言實現C語言
- 資料結構c語言實現順序表基本操作資料結構C語言
- 【資料結構】順序棧的實現(c++)資料結構C++
- 基礎資料結構(一)---(最全)定長順序表的實現資料結構
- 具體實現程式碼@資料結構探險——順序表資料結構
- 自學 資料結構四月二十二日_線性結構之順序表資料結構
- 資料結構中的線性表程式碼實現資料結構
- 【資料結構】順序佇列的實現(c++)資料結構佇列C++
- 自學 資料結構四月二十三日_線性結構之順序表(2)資料結構
- 南郵資料結構實驗1.1 順序表的操作資料結構
- 線性表的順序儲存C++程式碼實現C++
- 資料結構:線性表(Python實現基本操作)資料結構Python
- [資料結構] - 線性表資料結構
- 資料結構 | 線性表資料結構
- 資料結構——線性表資料結構
- 資料結構-線性表資料結構
- 資料結構—線性表資料結構
- 資料結構_順序表_順序表的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- Java實現資料結構之線性結構Java資料結構
- 南郵資料結構實驗1.1:順序表的相關操作資料結構
- 順序表的實現
- 資料結構和演算法(一)線性表實現資料結構演算法
- php與資料庫連線如何實現資料的順序和倒序PHP資料庫
- 實戰資料結構(7)_線性表的綜合操作資料結構
- 基本線性資料結構的Python實現資料結構Python
- 【資料結構之線性表總結】資料結構
- 資料結構-線性表、連結串列資料結構
- 資料結構實驗三:線性表綜合實驗資料結構
- 線性表__資料結構筆記資料結構筆記