資料結構 順序表的建立,增刪查改

2021-07-03 10:22:51 字數 3055 閱讀 8470

順序表

1. 順序表的定義

(1) 順序儲存方法

即把線性表的結點按邏輯次序依次存放在一組位址連續的儲存單元裡的方法。

(2) 順序表(sequential list)

用順序儲存方法儲存的線性表簡稱為順序表(sequential list)。

2. 結點ai 的儲存位址

不失一般性,設線性表中所有結點的型別相同,則每個結點所占用儲存空間大小亦相同。假設表中每個結點占用c個儲存單元,其中第乙個單元的儲存位址則是該結點的儲存位址,並設表中開始結點a1的儲存位址(簡稱為基位址)是loc(a1),那麼結點ai的儲存位址loc(ai)可通過下式計算:

loc(ai)= loc(a1)+(i-1)*c   1≤i≤n

注意:在順序表中,每個結點ai的儲存位址是該結點在表中的位置i的線性函式。只要知道基位址和每個結點的大小,就可在相同時間內求出任一結點的儲存位址。是一種隨機訪問結構

3.順序表型別定義

#define listsize 100 //表空間的大小可根據實際需要而定,這裡假設為100

typedef int datatype; //datatype的型別可根據實際情況而定,這裡假設為int

typedef struct seqlist;

下面是本人用寫的**:

#pragma once //只編譯一次

#define __seq_list__

#ifdef __seq_list__

#include#include#include#define max_size 100

typedef int datatype;

typedef struct seqlist //定義這個順序表的結構體型別

seqlist;

void initseqlist(seqlist *pseq); //初始化

void printseqlist(seqlist* pseq);//列印

void pushback(seqlist* pseq,datatype x);//尾插

void pushfront(seqlist* pseq,datatype x);//頭插

void popback(seqlist* pseq);//尾刪

void popfront(seqlist* pseq);//頭刪

void insert(seqlist* pseq, size_t index, datatype x);//插入

void modified (seqlist* pseq, size_t index, datatype x );//修改

void remove(seqlist* pseq, size_t index);//移除

int findret (seqlist* pseq, datatype x,int index);//查詢下標

void erase(seqlist* pseq, datatype x);//刪除乙個或所有

#endif __seq_list__

/****************************/

#include"seqlist.h"

void initseqlist(seqlist *pseq)

void printseqlist(seqlist *pseq)

printf("\n");

}void pushback(seqlist* pseq,datatype x)

else }

void pushfront(seqlist* pseq,datatype x)

else

pseq->array [0] = x;//在頭部插入資料

++pseq->size; //使有效元素的個數增加 }}

void popback(seqlist* pseq)

else }

void popfront(seqlist* pseq)

else

--pseq->size; }}

void insert(seqlist* pseq, size_t index, datatype x)

for(; i > index;i--)

pseq->array[index] = x; //插入值

++pseq->size;

}void modified (seqlist* pseq, size_t index, datatype x )

else }

void remove(seqlist* pseq, size_t index)//移除某個下標處的元素

else

--pseq->size ; //有效元素的個數減少 }}

int findret(seqlist* pseq, datatype x,size_t index )

} return -1;//未找到返回-1

}void erase(seqlist* pseq, datatype x)

else

while(ret != -1);//這是do while迴圈的執行條件

break;

default:

break;

} }}/****************************/

#include"seqlist.h"

void test1() //定義幾個tes函式,為避免主函式的龐大

void test2()

void test3()

int main()

這個小型的工程由乙個標頭檔案和兩個原始檔組成,在這裡我用(/*************/)分割開每乙個檔案。

經驗總結:

1>.寫完每個函式之後就立即測試它的功能,而不是將所有的函式功能模組要寫完之後再測試,已避免錯誤百出。

2>.在編一些邏輯不是那麼清晰的語句時,應該盡量用畫圖使思路更加清晰,而不是空想。

3>.當程式已經能滿足我們的需求時,我們應該盡量把程式優化。

資料結構 順序表 增刪查改

include include include include list.h 函式名 createlist 函式功能 建立線性表 引數 無 list createlist void return plist 函式名 destroylist 函式功能 銷毀線性表 函式返回值 無。void destro...

資料結構 動態順序表增刪查改實現

一 概念及機構 順序變是一種線性表,首先介紹線性表的概念 線性表 線性表 linear list 是n個具有相同特性的資料元素的有限序列。線性表是一種在實際中廣泛使用的資料結構常見的線性表 順序表 鍊錶 棧 佇列 字串 線性表在邏輯上是線性結構,也就說是連續的一條直線。但是在物理結構上並不一定是連續...

順序表的增刪查改

今天來實現簡單的順序表地增刪查詢操作 1.在開始敲 前,首先要明確自己要幹嘛。2.然後開始構思自己所要實現什麼樣的功能。3.之後將之前構思的功能弄好框架。4.最後再將每個框架的內容補充上。標頭檔案 include pragma once include typedef int sldatatype ...