線性結構 線性表

2021-07-30 11:58:19 字數 4090 閱讀 5184

線性結構:線性表、棧、佇列、串和陣列

線性結構的特點:除了第乙個元素和最後乙個元素外,每個資料元素有乙個前驅和乙個後繼,線性表是最簡單、最基本、最常用的資料結構,它有順序儲存和鏈式儲存兩種儲存方案

線性表是n個資料元素的有限序列,在表中,元素之間存在著線性的邏輯關係

特點:同一性(線性表由同類元素組成,每乙個ai必須屬於同一資料物件)

​ 有窮性(線性表是由有限個資料元素組成,表長度就是表中資料元素的個數)

​ 有序性(線性表中相鄰資料元素之間存在著序偶關係ai, ai+1)

指在記憶體中用一塊位址連續的儲存空間按順序儲存線性表的各個資料元素,順序表中邏輯上相鄰的資料元素在物理儲存位置上也是相鄰的lo

c(ai

)=lo

c(a1

)+d∗

(i−1

)(1<=

i<=n)

順序表的插入:從an

~ai按從後向前的順序向下移動,將新元素放置到空出的第i個位置,修改表長度,時間複雜度o(

n)順序表的刪除: 從ai+1~an

按從前向後的順序向上移動,將表的長度減一,時間複雜度o(n)x

相等的資料元素,繼續查詢的條件是沒找完且沒找到,結束查詢的時候只需要判斷下標的值與表的長度的關係,如果下標值大於表長度,則說明該元素不存在,否則返回下標值

順序表的**:

#include

#include

#define maxsize 100

#define false 0

#define true 1

typedef

int elemtype;

typedef

structseqlist;

//順序表的初始化

int init_seqlist(seqlist **l);

//順序表的插入

int insert_seqlist(seqlist *l, int i, elemtype x);

//順序表的刪除

int delete_seqlist(seqlist *l, int i);

//順序表中的按值查詢

int location_seqlist(seqlist *l, elemtype x);

int location_seqlist(seqlist *l, elemtype x)

if(i > l->length)

return i;

}int delete_seqlist(seqlist *l, int i)

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

l->length--;

return true;

} int insert_seqlist(seqlist *l, int i, elemtype x)

if(i < 1 || i > l->length+1)

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

l->elem[i] = x;

l->length++;

return true;

} int init_seqlist(seqlist **l)

l = (seqlist *)malloc(sizeof(seqlist)1);

if(*l == null)

(*l)->length = 0;

return true;

} void main(void)

for(i = 1; i < 6; i++)

printf("%d\n", l->length);

}

單鏈表:通過一組任意的儲存單元來儲存線性表中的資料元素,這組儲存單元可以是連續的,也可以是不連續的,該鍊錶上的每乙個節點都至少包含兩個域,乙個域儲存資料元素資訊(資料域),乙個域儲存直接後繼元素的位址(指標域)

相關操作:

- 建立單鏈表

- 頭插法(在鍊錶的頭部插入結點)

- 尾插法(在鍊錶的尾部插入結點)

- 求表長

- 查詢

- 按序號查詢

- 按值查詢

- 插入

- 刪除

具體**如下:

#include

#include

#define false 0

#define true 1

typedef

int elemtype;

typedef

struct lnodelnode, *linklist;

int init_linklist(linklist *h);

void create_linklist_head(linklist h); //頭插法建立鍊錶

int get_length(linklist h); //統計鍊錶的長度

void create_linklist2_tail(linklist h); //尾插法建立鍊錶

lnode* find_by_id(linklist h, int id); //根據序號查詢結點

lnode* find_by_data(linklist h, elemtype data); //根據值查詢結點(返回第乙個相等的)

int insert_linklist(linklist h, int index, elemtype data); //在指定序號後面新增新結點

int delete_linklist(linklist h, int index); //按照序號刪除結點

void show_linklist(linklist h); //輸出鍊錶節點的值

void show_linklist(linklist h)

}int delete_linklist(linklist h, int index)

return false;

}int insert_linklist(linklist h, int index, elemtype data)

return false;

} lnode* find_by_data(linklist h, elemtype data)

if(p != null)

}lnode* find_by_id(linklist h, int id)

if(i == id)

}void create_linklist2_tail(linklist h)

printf("請輸入資料(-1表示結束輸出)\n");

scanf("%d", &data);

while(data != -1)

}int get_length(linklist h)

return i;

}void create_linklist_head(linklist h)

printf("請輸入資料(-1表示結束輸出)\n");

scanf("%d", &data);

while(data != -1)

}int init_linklist(linklist *h)

*h = (lnode*)malloc(sizeof(lnode) * 1);

if(*h == null)

(*h)->next = null;

return true;

}void main(void)

create_linklist2_tail(h);

p = find_by_id(h, 2);

printf("%d\n", p->data);

p = find_by_data(h, 3);

printf("%d\n", p->data);

insert_linklist(h, 1, 10);

delete_linklist(h, 3);

show_linklist(h);

}

線性結構 線性表

資料結構是 adt abstract data type,資料抽象型別 的物理實現。什麼是線性表?線性表 由同型別的資料元素構成有序序列的線性結構 兩種實現模型 順序表,鍊錶 資料物件集 n個元素構成的有序序列 初始化鍊錶 init 返回鍊錶長度 len 判斷為空 is empty 指定位置新增 i...

線性結構 線性表

由同型別資料元素構成有序序列的線性結構 list makeempty int find elementtype x,list ptrl void insert elementtype x,int i,list ptrl if i 1 i ptrl last 2 for j ptrl last j i...

1 線性結構 線性表

由同型別資料元素構成有序序列的線性結構。利用陣列的連續儲存空間順序存放線性表的個元素。typedef struct lnode list struct lnode struct lnode l list ptrl 初始化 建立空的順序表 list makeempty 查詢int find eleme...