順序表的特徵:
1由唯一的表名標識;
2佔據一塊連續的儲存空間;
3資料順序存放,元素之間有先後關係;
定義動態的順序表:
#define maxsize 100
typedef struct sqlist;
/*這個結構體型別存放的是順序表的資訊和順序表的資料*/
初始化順序表
void initsqlist(sqlist *l) /*初始化乙個順序表*/
l->elem=(float *)malloc(maxsize*sizeof(int)); //為順序表分配maxsize個元素的空間
if(!l->elem) exit(0); //第乙個元素不是空指標則返回
/*初始化結構體成員*/
l->length=0; //順序表中沒有元素,長度為0
l->listsize=maxsize; //順序表的最大長度
向順序表中插入元素:
1判斷插入位置是否合法
若根據陣列索引的習慣,乙個長度為n的順序表插入元素的位置是0到n-1,所以i<0,i>n(應為n-1,可是這樣原來長度為0就不行了)皆不合法
2如果分配的記憶體空間不夠,則追加記憶體空間;
3將表中i-1之後的元素後移乙個元素位置(要從後往前遍歷)
4將下標為i的位置插入目標元素
**:void insert(sqlist *l,int i,float m) /*向順序表中插入乙個元素 l:順序表的頭指標; i要插入的元素的位置(這裡使用的是陣列習慣的索引方式); m:要插入的資料的內容 */
if(i<0||i>l->length) exit(0);//1插入越界,非法 有效範圍是從0開始到元素個數減1
/*2如果順序表的元素個數超過了順序表的最大長度,追加記憶體空間*/
if(l->length>=l->listsize)
base=(float *)realloc(l->elem,(l->listsize+100)*sizeof(float)); //realloc函式用於在已分配記憶體基礎上追加記憶體空間,所追加的空間是連續的
l->elem=base; //更新記憶體基位址
l->listsize+=10; //儲存空間增大10單元
insertptr=&(l->elem[i]); //給插入元素的位置的指標賦值;
/*3將i-1後的元素順序後移乙個元素的位置*/
for(p=&(l->elem[l->length-1]);p>=insertptr;p--) //從後往前遍歷,初始位置是順序表的最後乙個元素
*(p+1)=*p; //前乙個元素放到後乙個的位置,實現順序後移
*insertptr=m; //4在第i個位置插入要插入的元素
l->length++;//表長遞增1;
刪除順序表中的元素:
1判斷刪除位置是否越界(長度為n的順序表從0到n-1有效)
2i後的元素前移乙個元素的位置(要從前往後遍歷)
3前移的過程目標元素自然刪除;
/*刪除順序表中的指定元素*/
void del(sqlist *l,int i) /*l:順序表的頭指標; i要刪除的元素的位置(這裡使用的是陣列習慣的索引方式)*/
float *delptr,*p; //delptr:要刪除的元素的指標,p:索引指標
if(i<0||i>l->length) exit(0);//刪除越界,非法 有效範圍是從0開始到元素個數減1
/*刪除不需要追加記憶體空間*/
delptr=&(l->elem[i]); //給刪除元素的位置的指標賦值;
/*將i後的元素順序前移乙個元素的位置*/
for(p=delptr;p<&(l->elem[l->length-1]);p++) //從前往後遍歷,初始位置是順序表要刪除的位置
*p=*(p+1); //後乙個元素放到前乙個的位置,實現順序前移
l->length--;
//順序前移的過程中順便就把目標元素刪除了
整體**:
功能:1初始化乙個順序表;
2從0到14插入15個數,並將表中所有元素列印出來
3刪除下標為4的元素,並將表中所有元素列印出來
#include
#include
#define maxsize 10 //初始:分配10個元素的空間
typedef struct sqlist;
void initsqlist(sqlist *l);
void insert(sqlist *l,int i,float m);
void del(sqlist *l,int i);
main()
sqlist item;
initsqlist(&item);
int i;
for(i=0;i<15;i++)
insert(&item,i,i);
for(i=0;iprintf(" %f",item.elem[i]);
printf("/n/n");
del(&item,4);
for(i=0;iprintf(" %f/n",item.elem[i]);
void initsqlist(sqlist *l) /*初始化乙個順序表*/
l->elem=(float *)malloc(maxsize*sizeof(int)); //為順序表分配10個元素的空間
if(!l->elem) exit(0); //第乙個元素不是空指標則返回
l->length=0; //順序表中沒有元素,長度為0
l->listsize=maxsize; //順序表的最大長度
void insert(sqlist *l,int i,float m) /*向順序表中插入乙個元素 l:順序表的頭指標; i要插入的元素的位置(這裡使用的是陣列習慣的索引方式); m:要插入的資料的內容 */
if(i<0||i>l->length) exit(0);//插入越界,非法 有效範圍是從0開始到元素個數減1
/*如果順序表的元素個數超過了順序表的最大長度,追加記憶體空間*/
if(l->length>=l->listsize)
base=(float *)realloc(l->elem,(l->listsize+100)*sizeof(float)); //realloc函式用於在已分配記憶體基礎上追加記憶體空間,所追加的空間是連續的
l->elem=base; //更新記憶體基位址
l->listsize+=10; //儲存空間增大10單元
insertptr=&(l->elem[i]); //給插入元素的位置的指標賦值;
/*將i-1後的元素順序後移乙個元素的位置*/
for(p=&(l->elem[l->length-1]);p>=insertptr;p--) //從後往前遍歷,初始位置是順序表的最後乙個元素
*(p+1)=*p; //前乙個元素放到後乙個的位置,實現順序後移
*insertptr=m; //在第i個位置插入要插入的元素
l->length++;//表長遞增1;
/*刪除順序表中的指定元素*/
void del(sqlist *l,int i) /*l:順序表的頭指標; i要刪除的元素的位置(這裡使用的是陣列習慣的索引方式)*/
float *delptr,*p; //delptr:要刪除的元素的指標,p:索引指標
if(i<0||i>l->length) exit(0);//刪除越界,非法 有效範圍是從0開始到元素個數減1
/*刪除不需要追加記憶體空間*/
delptr=&(l->elem[i]); //給刪除元素的位置的指標賦值;
/*將i後的元素順序前移乙個元素的位置*/
for(p=delptr;p<&(l->elem[l->length-1]);p++) //從前往後遍歷,初始位置是順序表要刪除的位置
*p=*(p+1); //後乙個元素放到前乙個的位置,實現順序前移
l->length--;
//順序前移的過程中順便就把目標元素刪除了
資料結構 順序表
順序表示最簡單的乙個資料結構,直接貼 吧,因為比較簡單。include include typedef struct sqlist sqlist void initlist sqlist l l length 0 void getelem sqlist l 初始化 l length j printf...
資料結構順序表
include include include include include include include include include include include include include include using namespace std define maxn 100000...
資料結構 順序表
1.線性表 2.鍊錶 標頭檔案 ifndef list h define list h const int maxlen 100 順序表的最大儲存長度 template class list template void list setlist cin.clear template list lis...