順序表和煉表

2022-06-30 00:51:16 字數 3603 閱讀 7644

1.名詞解釋:

資料:對客觀事物的符號表示

資料元素:資料的基本單位,可由若干個資料項組成

資料項:資料的不可分割的最小單位

資料物件:性質相同的資料元素的集合,是資料的子集

資料結構:相互之間存在特定關係的資料元素的集合(關係描述資料元素之間的邏輯關係)

物理結構(儲存結構):資料結構在計算機中的表示

資料型別:乙個值的集合和定義在值集上的一組操作的總稱

抽象資料型別:乙個數學模型以及定義在該模型上的一組操作

2.演算法的5個重要特性

有窮性、確定性、可行性、輸入(有零個或多個)、輸出(有乙個或多個)

問題1:線性表的長度(length)和分配的儲存容量(listsize)的關係

當前長度是線性表元素的個數

儲存容量是線性表能存放的元素的個數,以sizeof(elemtype)為單位

問題2:realloc函式的用法

函式宣告void *realloc(void *ptr, size_t size)

指標指向需要重新分配記憶體的記憶體塊

size為記憶體塊新的大小

問題3:l->elem[i]寫法的意思

malloc分配了一塊記憶體空間,用指標進行訪問,l->elem[i]即訪問l->elem+i元素

問題4:for(int j=l->length-1;j>=i-1;j--)

元素下標從0開始,第乙個元素下標為0

#include#include//動態分配順序表儲存結構

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

#define increment 10 //分配溢位時,線性表儲存空間的增量

#define error 0

#define ok 1

typedef int elemtype; //定義線性表元素的型別

typedef struct sqlistsqlist;

int initlist_sq(sqlist *l); //初始化線性表

int creatlist_sq(sqlist *l,int n); //構造長度為n的線性表

int listinsert_sq(sqlist *l,int i,elemtype e); //在第i個元素前插入乙個元素e

int listdelete_sq(sqlist *l,int i); //刪除第i個元素

int listlocate_sq(sqlist *l,elemtype e); //查詢與e相等的元素

int printlist_sq(sqlist *l);

int initlist_sq(sqlist *l)

int creatlist_sq(sqlist *l,int n)

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

l->listsize = list_init_size + increment;

} //將插入位置及之後的元素後移,從最後乙個元素開始後移

for(int j=l->length-1;j>=i-1;j--)

l->elem[i-1]=e; //將e插在第i個位置

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

return ok;

}int listdelete_sq(sqlist *l,int i)

//將要刪除元素後面的元素前移

for(int j=i-1;j<=l->length-1;j++)

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

return ok;

}int printlist_sq(sqlist *l)

int listlocate_sq(sqlist *l,elemtype e)

if(i<=l->length)

else

return -1;

}int main()

else

return 0;

}

頭指標:頭指標指向鍊錶中第乙個結點儲存位置

頭結點:第乙個結點前,附設的乙個結點

問題1:取第i個元素,第i個元素不存在if(!p || j>i)

p指向第1個元素,j=1,p與j保持同步(即p指向鍊錶中第j個元素)

i的值不合法,即第i個元素不存在(i小於1或者大於表長)

問題2:刪除第i個元素,迴圈終止條件

j從0開始?

linklist p=l; int j=0; while(p->next && j

#include#include#define ok 1

#define error 0

typedef int elemtype;

typedef struct lnodelnode,*linklist;

int creatlist_l(linklist *l,int n); //構造長度為n的鍊錶

int getelem_l(linklist l,int i,elemtype *e); //取第i個元素,賦值給e

int listinsert_l(linklist l,int i,elemtype e); //在第i個位置之前插入e

int listdelete_l(linklist l,int i); //刪除第i個位置的元素

void print_l(linklist l);

int creatlist_l(linklist *l,int n)

return ok;

}int getelem_l(linklist l,int i,elemtype *e)

if(!p || j>i) //第i個元素不存在

return error;

e = p->data; ///取第i個元素

return ok;

}int listinsert_l(linklist l,int i,elemtype e)

if(!p || j>i-1)

s = (lnode*)malloc(sizeof(lnode)); //生成新結點

s->data = e;

s->next = p->next;

p->next = s;

return ok;

}int listdelete_l(linklist l,int i)

if(!(p->next) || j>i-1)

return error;

q = p->next;

p->next = q->next;

free(q);

return ok;

}void print_l(linklist l)

}int main()

else

printf("error");

return 0;

}

參考部落格:

順序表和煉表

定義 線性表是由n個具有相同特性的資料元素組成的有限序列,表中每個元素具有相同元素。邏輯上為連續的線性結構。常見的線性表 順序表,鍊錶 棧 佇列 字串 線性表根據物理儲存方式分為 順序表和煉表 線性表在邏輯上是線性結構,在物理上並不是連續的,線性表在物理上儲存時,通常是以陣列和鏈式結構的形式儲存。動...

c 順序表和煉表

這節來說下順序表和煉表 1 集合中必存在唯一的 第乙個元素 2 集合中必存在唯一的 最後乙個元素 3 除第乙個元素外,其他的元素都只有乙個後繼 4 除最後乙個元素外,其他的元素都只有乙個前驅 把線性表中的節點按照邏輯次序儲存在一組連續的位址單元中,在計算機中以陣列的形式儲存的線性表。在順序表中每個節...

順序表和煉表(Sqlist Linklist)

眾所周知,線性表是乙個比較靈活的儲存空間,其中有兩種儲存格式 線性表和鍊錶,下文盡量詳細地進行整理二者的特點和區別。順序表,顧名思義,就是用連續的空間儲存當下得到的資料。順序鏈性錶用sqlist稱呼,提到sqlist就指的是順序鏈性表 其特點在於 1.儲存空間是連續的,可以通過下標找到前後成員的值 ...