定義
線性表:零個或多個資料元素的有限序列。
首先,他是乙個序列,元素之間是有順序的,若存在多個元素,**則第乙個無前驅,最後乙個無後繼,其他元素每個元素都有且只有乙個前驅和後繼。 **然後,線性表強調是有限的,元素的個數是有限的。
線性表元素的個數n(n>-0)定義為線性表的長度,當n=0時,稱為空表。
在複雜的線性表中,乙個資料元素可以由若干個資料項組成。相同型別的資料。
線性表的抽象資料型別
adt 線性表(list)
data
線性表的資料物件集合為,每個元素的型別均為
datatype
。其中,除第乙個元素a1
外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an
外,每乙個元素有且只有乙個直接後驅元素,資料元素直接的關係是一一對應的關係。
operation
initlist(*l)
: 初始化操作,建立乙個空的線性表l。
listempty(l)
: 若線性表為空,,返回true,否則返回false。
clearlist(*l)
: 將線性表清空。
getelem(l,i,*e)
: 將線性表l中的第i個位置元素值返回給e。
.......
順序儲存結構//此為大話資料結構中的簡單例子,可以忽略
void unionl(list *la,list lb)
}
單鏈表的整表建立//結構**
typedef struct linklistlist;
//獲取元素
int get_elem(list l, int i,int *e)
//插入元素
int list_insert(list* l, int i, int e)
}l->data[i-1]=e;
l->length++;
for (int i = 0; i < l->length; ++i)
return 1;
}//刪除元素
int list_delete(list *l, int i, int *e)
}l->length--;
for (int i = 0; i < l->length; ++i)
return 1;
}//查詢線性表中與e相等的元素
int locate_elem(list l, int e)node;
typedef struct node *linklist; //定義struct node* 的linklist,之後進行修改鍊錶的操作時,直接使用linklist代表struct node*。
//建立鍊錶
linklist * initlink()
return p;
}//獲取第i個元素
int get_elem(linklist l, int i, int* e)
if (!p || j>i)
return 0;
*e = p->data;
return 1;
}//插入
int list_insert(linklist l, int i, int e)
if (!p || j>i)
return 0;
s=(linklist)malloc(sizeof(node));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}//刪除
int list_delete(linklist l, int i, int* e)
if (!p->next) //若鍊錶末尾為空,第i個節點不存在
return 0;
q=p->next; //p->next為將刪除的結點
p->next=q->next; //將q的後繼賦值給p的後繼
*e=q->data; //將q結點中的資料給e
free(q); //**該節點,釋放記憶體
return 1;
}
單鏈表結構與順序儲存結構優缺點//單鏈表的整表建立
//頭插法
void create_list_head(linklist l, int n)
}//尾插法
void create_list_tail(linklist l, int n)
r->next=null;
}//刪除鍊錶,將鍊錶置空
int clear_list(linklist l)
l->next=null;
return 1;
}
儲存分配方式
時間效能
空間效能
//這裡簡單寫個main函式呼叫以上順序儲存結構的函式,鏈式相同不再重複
#include #define maxsize 20
typedef struct linklistlist;
int get_elem(list l, int i,int *e)
int list_insert(list* l, int i, int e)
}l->data[i-1]=e;
l->length++;
for (int i = 0; i < l->length; ++i)
return 1;
}int list_delete(list *l, int i, int *e)
}l->length--;
for (int i = 0; i < l->length; ++i)
return 1;
}int locate_elem(list l, int e)
return 0;
}int main()
get_elem(l1, 9, &num);
printf("%d\n",num);
list_insert(&l1,5,100);
printf("\n");
list_delete(&l1, 1, &num1);
printf("\n");
printf("%d",locate_elem(l1,1));
return 0;
}
資料結構(C語言版) 線性表
1 線性結構的特點 1 存在唯一乙個被稱作 第乙個 的資料元素。2 存在唯一乙個被稱作 最後乙個 的資料元素。3 除第乙個元素之外,每個資料元素均只有乙個前驅。4 除最後乙個元素之外,每個資料元素均只有乙個後繼。2 線性表 n個資料元素的有限序列,是一種邏輯結構。1 同一線性表中的元素具有相同的性質...
資料結構(C語言版) 線性表(順序表)
二 線性表的順序儲存 三 配套實驗 線性表是具有相同資料型別的n n 0 個資料元素的有限序列。1 簡單的線性表。例如,26個英文本母表 一周七天。2 複雜的線性表。例如,學生資訊登記表。在複雜的線性表,常把資料元素稱為記錄 record 它由若干個資料項 item 組成,而含有大量記錄的線性表又稱...
線性表的順序表示與實現 C語言版
線性表的順序表示與實現 c語言版 本例為純c語言實現,無c 部分 本例為純c語言實現,所用編譯器為c編譯器,非c 編譯器 線性表的順序表示與實現 include include define list init size 100 線性表儲存空間初始分配量 define list increment ...