資料結構 順序表(C語言實現)

2021-08-02 09:36:56 字數 3258 閱讀 7945

順序表的定義是:把線性表中所有表項按照其邏輯順序依次儲存到從計算機儲存中指定儲存位置開始的一塊連續的儲存空間中。這樣,線性表中第乙個表項的儲存位置就是被指定的儲存位置,第i個表項(2 ≤ i ≤ n)的儲存位置緊接在第i - 1個表項的儲存位置的後面。假設順序表中每個表項的資料型別為t,則每個表項所占用儲存空間的大小相同,均為sizeof(t),整個順序表所占用儲存空間的大小為n × sizeof(t),其中n表示線性表的長度。

順序表的特點是:

1.  在順序表中,各個表項的邏輯順序與其存放的物理順序一致,即第i個表項儲存於第i個物理位置(1 ≤ i ≤ n)。

2.  對順序表中所有表項,既可以進行順序訪問,也可以進行隨機訪問。也就是說,既可以從表的第乙個表項開始逐個訪問表項,也可以按照表項的序號(下標)直接訪問表項。

順序表可以用c語言的一維陣列來實現,c語言的一維陣列可以是靜態分配的,也可以是動態分配的。假設順序表a的起始儲存位置為loc(1),第i個表項的儲存位置為loc(i),則有:loc(i) = loc(1) + (i - 1) × sizeof(t),其中loc(1)是第乙個表項的儲存位置,即陣列中第0個元素的位置。

#include #include #define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

#define overflow -2

#define list_init_size 100 // 線性表儲存空間的初始分配量

#define listincrement 10 // 線性表儲存空間的分配增量

typedef int boolean;

typedef int elemtype;

typedef struct sqlist;

boolean initlist_sq(sqlist* l);

// 構造乙個空的線性表l

boolean listinsert_sq(sqlist* l, int i, elemtype e);

// 在順序線性表l中第i個位置之前插入新的元素e

boolean listdelete_sq(sqlist* l, int i, elemtype* e);

// 在順序線性表l中刪除第i個元素,並用e返回其值

int locateelem_sq(sqlist l, elemtype e);

// 在順序線性表l中定位元素e,並返回是第幾個元素,若沒找到則返回0

void margelist_sq(sqlist la, sqlist lb, sqlist* lc);

// 已知順序線性表la和lb的元素按值非遞減排列,歸併la和lb得到新的順序線性表lc,lc的元素也按值非遞減排列

void input(sqlist* l);

// 輸入資料,建立順序線性表

void output(sqlist* l);

// 輸出順序線性表

boolean initlist_sq(sqlist* l)

l->length = 0; // 空表長度為0

l->listsize = list_init_size; // 初始儲存容量

return ok;

}boolean listinsert_sq(sqlist* l, int i, elemtype e)

if (l->length >= l->listsize)

l->elem = newbase;

l->listsize += listincrement; // 增加儲存容量

} elemtype *p, *q;

q = &(l->elem[i - 1]); // q為插入位置

for (p = &(l->elem[l->length - 1]); p >= q; p--)

*q = e; // 插入e

l->length++; // 表的長度加1

return ok;

}boolean listdelete_sq(sqlist* l, int i, elemtype* e)

elemtype* p = &(l->elem[i - 1]); // p為被刪除的元素的位置

*e = *p; // 將被刪除的元素的值賦給e

elemtype* q = l->elem + l->length - 1; // q為表尾元素的位置

for (p++; p <= q; p++)

l->length--; // 表的長度減1

return ok;

}int locateelem_sq(sqlist l, elemtype e)

if (i <= l.length)

else return 0;

}void margelist_sq(sqlist la, sqlist lb, sqlist* lc)

elemtype* pa_last = la.elem + la.length - 1;

elemtype* pb_last = lb.elem + lb.length - 1;

while (pa <= pa_last && pb <= pb_last)

else *pc++ = *pb++;

} while (pa <= pa_last)

while (pb <= pb_last)

}void input(sqlist* l)

printf("輸入元素個數不能超過%d個!請重新輸入!\n", l->listsize);

}for (i = 0; i < n; i++)

l->length += n; // 表的長度增加n

}void output(sqlist* l)

printf("\n");

}int main(int argc, char* argv)

output(&l);

if(listdelete_sq(&l, 10, &e))

output(&l);

} else

return 0;

}

C語言實現順序表 資料結構

include include 需求,寫乙個順序線性表,儲存乙個位址位置 define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 define true 1 define false 0 define ...

資料結構 順序表(C語言實現)

順序表是用一段實體地址連續的儲存單元依次儲存資料元素的線性結構,一般情況下採用陣列儲存。在陣列上完成資料的增刪查改。順序表一般可以分為靜態順序表 使用定長陣列儲存 和動態順序表 使用動態開闢的陣列儲存 本次實現的是動態順序表,具體 如下 common.h include include includ...

資料結構順序表(C語言實現)

標頭檔案和函式申明 include include include typedef struct arr 定義了乙個資料型別,該資料型別的名字叫做struct arr,該資料型別含有三個成員pbase,len,cnt arr void init arr arr parr,int length arr...