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.儲存空間是連續的,可以通過下標找到前後成員的值 ...