資料結構學習筆記——線性表之順序表(c語言實現)
阿新 • • 發佈:2018-12-17
1.概念
順序表即線性表的順序儲存結構 ,指的是用一段地址連續的儲存單元依次儲存線性表資料元素。線上性表中,每個資料元素的型別都相同,一般可以用一維陣列來實現順序儲存結構。
2.實現
(1)建立順序表的結構
利用c語言結構體來建立順序表的結構,順序表結構體中包含資料和表長。
#define MAXSIZE 10 //儲存空間初始分配量 typedef int ElemType; //定義型別,此處為int(可變) typedef int Status; typedef struct { ElemType data[MAXSIZE];//建立陣列儲存空間 int length; //線性表當前長度 }sqlist;
(2)初始化表單
初始化一個n長度的順序表並列印,表單資料初始化為1~n,n為函式形參InitLength。
1 | 2 | 3 | 4 | 5 | … | n |
---|
示例程式碼:
void sqlistInit(sqlist *sl,int InitLength) { int j; sl->length=0; printf("當前表單:"); for(j=0;j<InitLength;j++) { sl->data[j]=j+1; printf("%d ",sl->data[j]); ++sl->length; } printf("\n初始表單長度:%d\n",sl->length); }
結果演示:
(3)增:在表中第i個位置增加資料e
示例程式碼:
Status sqlistInsert(sqlist *L,int i,ElemType e) { int k; if(L->length==MAXSIZE)//表已滿 { printf("表已滿!\n"); return error; } if(i<1||i>L->length+1)//i不在範圍內 { printf("插入位置不在表單範圍內!\r\n\n"); return error; } if(i<L->length+1)//插入資料不在表尾 { for(k=L->length;k>=i;k--)//插入位置後資料元素依次向後移動一位 L->data[k]=L->data[k-1]; } L->data[i-1]=e;//插入新元素 L->length++; return ok; }
結果演示: 在任意位置插入數字: 也可以在頭部和尾部插入:
(4)刪:刪除表中第i個位置資料
要刪除第i個數據,即將i位置後資料依次左移,表長減一 示例程式碼:
Status sqlistDelete(sqlist *L,int i)
{
int k;
if(L->length==0)//空表
{
printf("無刪除物件,這是一個空表!\n");
return error;
}
if(i<1||i>L->length)//i不在範圍內
{
printf("找不到該刪除物件!\r\n\n");
return error;
}
for(k=i;k<L->length;k++)//第i個位置後資料依次左移
L->data[k-1]=L->data[k];
L->length--;
return ok;
}
結果演示: 刪除第三個數字
(5)改:改變表中第i個位置資料
示例程式碼:
Status sqlistChange(sqlist *L,int i,ElemType e)
{
int k;
if(L->length==0)//空表
{
printf("無改變物件,這是一個空表!\n");
return error;
}
if(i<1||i>L->length)//i不在範圍內
{
printf("找不到該物件!\r\n\n");
return error;
}
L->data[i-1]=e;//改變數值
return ok;
}
(6)查:查詢表中第i個位置資料,並返回該值
第i個數據即為元素da[i-1],在表單範圍內返回該值即可 示例程式碼:
Status sqlistLocate(sqlist *L,int i)
{
int k;
if(L->length==0)//空表
{
printf("這是一個空表!\n");
return error;
}
if(i<1||i>L->length)//i不在範圍內
{
printf("找不到該物件!\r\n\n");
return error;
}
return L->data[i-1];
}
結果演示:
(7)其他
3.優劣勢分析
優點 | 缺點 |
---|---|
以上就是對順序儲存結構的線性表的學習及分享。