資料結構
資料之間的三種關係:
1、邏輯關係
(1)線性結構:線性表、佇列、棧
(2)非線性結構:樹、圖
2、儲存關係
(1)順序儲存
(2)鏈式儲存
(3)索引儲存
(4)雜湊儲存
3、資料關係
檢索、排序、插入、刪除、修改等
線性表的定義:線性表就是零個或多個相同資料元素的有限序列
線性表的特徵:
(1)對於非空表,第乙個是表頭,沒有前驅
(2)最後乙個是表尾,沒有後繼
(3)其他的每個元素有且僅有乙個前驅和乙個後繼
程式設計:seqlist.c
#include #include #include "seqlist.h"
//建立
seqlist_t *create_seqlist(void)
l->last = -1;
return l;
}//釋放某個順序表
void clear_seqlist(seqlist_t *l)
free(l);
return ;
} /*
//判斷是否為空
int is_empty_seqlist(seqlist_t *l)}*/
//判斷是否為滿
int is_full_seqlist(seqlist_t *l)
return (l->last == maxsize-1);
}//設定為空
void set_empty_seqlist(seqlist_t *l)
l->last = -1;
return ;
}//獲取順序表的長度
int get_length_seqlist(seqlist_t *l)
return (l->last+1);
}//列印順序表的元素
void show_seqlist(seqlist_t *l)
for(i = 0;i < l->last;i++)
printf("l->data[%d] = %d\n",i,l->data[i]);
return ;
}//插入值x到位置pos
int insert_seqlist(seqlist_t *l,data_t x,int pos)
for(i = l->last+1;i>=pos;i--)
l->data[i+1] = l->data[i];
l->data[pos] = x;
l->last++;
return 0;
}//刪除pos位置的值
int delete_seqlist(seqlist_t *l,int pos)
for(i=0;i<=get_length_seqlist(l);i++)
l->data[i] = l->data[i+1];
l->last--;
return 0;}
//將pos位置的值改為x
int change_seqlist(seqlist_t *l,data_t x,int pos)
l->data[pos] = x;
return 0;}
//查詢值x的位置
int search_seqlist(seqlist_t *l,data_t x)
return -1;
}
seqlist.h
#ifndef _seqlist_h_
#define _seqlist_h_
#define maxsize 100
typedef int data_t;
typedef structseqlist_t;
//建立
seqlist_t *create_seqlist(void);
//釋放某個順序表
void clear_seqlist(seqlist_t *l);
//判斷是否為空
int is_empty_seqlist(seqlist_t *l);
//判斷是否為滿
int is_full_seqlist(seqlist_t *l);
//設定為空
void set_empty_seqlist(seqlist_t *l);
//獲取順序表的長度
int get_length_seqlist(seqlist_t *l);
//列印順序表的元素
void show_seqlist(seqlist_t *l);
//插入值x到位置pos
int insert_seqlist(seqlist_t *l,data_t x,int pos);
//刪除pos位置的值
int delete_seqlist(seqlist_t *l,int pos);
//將pos位置的值改為x
int change_seqlist(seqlist_t *l,data_t x,int pos);
//查詢值x的位置
int search_seqlist(seqlist_t *l,data_t x);
#endif
test.c
#include #include #include "seqlist.h"
int main(int argc,char **ar**)
makefile
cc = gcc
cflags = -o0 -g -wall
test:test.c seqlist.c
$(cc) $(cflags) -o $@ $^
.phony:clean
clean:
rm -rf test
補充一點:
linknode n1;
n1.data = 10;
n1.next = null;
//這是靜態分配,存放在棧上
linklist p;
p = (linklist)malloc(sizeof(linknode));
//動態分配,存放在堆上
線性表 順序表
1 線性表 線性表是最基本 最簡單 也是最常用的一種資料結構。線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。線性表的邏輯結構簡單,便於實現和操作。因此,線性表這種資料結構在實際應用中是廣泛採用的一種資料結構。線性表 list,零個或多個資料...
線性表 順序表
線性結構的特點是 在非空的有限集合中,只有唯一的第乙個元素和唯一的最後乙個元素。第乙個元素沒有直接前驅元素,最後乙個沒有直接的後繼元素。其它元素都有唯一的前驅元素和唯一的後繼元素。要想將線性表在計算機上實現,必須把其邏輯結構轉化為計算機可識別的儲存結構。線性表的儲存結構主要有兩種 順序儲存結構和鏈式...
線性表 順序表
基本思想 用一段位址連續的儲存單元一次儲存線性表的資料元素 隨機訪問 注意事項 c 語言中陣列下標是從0開始的,而線性表中元素序號是從1開始的,也就是說 線性表中第i個元素儲存結構在陣列中下標為i 1的位置。首先是大體的函式宣告 const int maxsize 100 根據實際問題定義具體的大小...