資料結構之線性表的順序儲存結構(陣列)的插入與刪除
阿新 • • 發佈:2019-02-18
線性表的順序存數結構:指的是用一段地址連續的儲存單元一次儲存線性表的資料元素
在記憶體中找塊記憶體,把相同資料型別的資料元素一次存放在這塊空間中。可以用以為陣列來實現順序儲存結構。陣列的長度是存放線性表的儲存空間的長度,線性表的長度是資料元素實際的個數。線性表的長度應該限於等於陣列的長度
優點:無需為表中元素之間的邏輯關係而增加額外的儲存空間;可以快速的存取表中任一位置的元素
缺點:插入和刪除操作需要移動大量元素;當線性表長度變化較大時,難以確定儲存空間的容量;造成儲存空間的碎片
實現程式碼:
#include<stdio.h> #define size 50 int getLength(char *string){//獲取字串長度 int i = 0; while(string[i] != '\0' ){ i++; } return i+1; } int insert(char * string , int i , char newChar,int *length){//在字串 string 指定位置 i 插入新字元newChar,更改字串長度 length int j = *length; if( i <= 0 || i > *length){//指定位置不合法 return 0; } if( i < *length){ //指定位置在字串中間,從末尾開始至指定位置的字元全部往後移一位 for(; j >= i ; j--){ string[j] = string[j-1]; } string[j] = newChar;//指定位置更換成新字元 } *length += 1;//字串長度增加1 return 1; } int deleteCh(char *string , int i, char *deleteChar,int *length){//刪除字串string 位置 i上的字元,deleteChar記錄刪除字元,更改字串的長度length int j ; char status[10]; char *p = status; if(i <= 0 || i > *length){// 位置i不合法 return 0; } if(i < *length){//位置在字串中間 *deleteChar = string[i-1];//deleteChar記錄刪除字元 for( j = i-1 ; j < *length ; j++ ){//從刪除字元位置i開始的後面所有字元往前移一位 string[j] = string[j+1]; } string[j] = '\0';//設定末尾字元為結束字元 } *length -=1;//字串長度減1 return 1; } void main(){ char array[size]; char *string = array;//字串 int length ;//記錄字串的長度 char deleteChar;//記錄被刪除的字元 int insertPosition;//插入的位置 int deletePosition;//刪除的位置 printf("please input a string:"); scanf("%s",string);//輸入一串字元 printf("\n"); length = getLength(string);//返回字串的長度 printf("%d\n",length); printf("請輸入插入位置:");//輸入插入的位置 scanf("%d",&insertPosition); insert(string,insertPosition,'A',&length);//在string字串中的insertPosition位置上插入字元A printf("%s\n",string); printf("請輸入刪除的位置:"); scanf("%d",&deletePosition);//輸入刪除位置 deleteCh(string,deletePosition,&deleteChar,&length); printf("%s\t刪除的字元為:%c\n",string,deleteChar); }