線性表c語言版

2022-06-15 16:48:14 字數 3345 閱讀 9286

定義

線性表:零個或多個資料元素的有限序列。

首先,他是乙個序列,元素之間是有順序的,若存在多個元素,**則第乙個無前驅,最後乙個無後繼,其他元素每個元素都有且只有乙個前驅和後繼。 **然後,線性表強調是有限的,元素的個數是有限的。

線性表元素的個數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 ...