靜態陣列實現的順序表(C語言實現)

2021-08-16 19:11:13 字數 4103 閱讀 8559

在寫順序表之前我們先來了解下相關的一些知識,以便我們後期能夠寫出更好的東西。

資料結構是相互之間存在一種或多種特定關係的資料元素的集合。根據資料元素之間關係的不同特性,通常有如下種基本結構:

集合:結構中的元素之間除了「同屬於乙個集合」的關係外,別無其他的關係。如:廣義表。

線性結構:結構中的資料元素之間存在著乙個對乙個的關係。如:鍊錶。

樹形結構:結構中的資料元素之間存在著乙個對多個的關係。如二叉樹。

圖(網)狀結構:結構中的資料元素之間存在著多個對多個的關係。如:圖。

順序表的特徵是:在記憶體中占用連續的儲存單元,可以簡單的理解為順序表就是陣列,知識根據需要,在實際應用中動態分配順序錶用的記憶體單元,而陣列是在編譯的時候,預分配了指定大小的記憶體單元,順序表採用的是陣列,但是陣列有靜態陣列和動態陣列所以順序表有靜態順序表和動態順序表。

順序表的功能如下:

1、初始化

2、尾插

3、尾刪

4、頭插

5、頭刪

6、任意位置插入

7、任意位置刪除

8、讀取任意位置元素並返回元素值

9、更改任意位置元素值

10、查詢任意元素,並返回陣列的下標 

test.h

#define _crt_secure_no_warnings

#pragma once

#include #include #include #define max_size 1000

typedef int datatype;//定義資料的型別;

typedef struct seqlist

seqlist;

void seqlistprint(seqlist *seqlist);//列印順序表

void seqlistinit(seqlist *seqlist);//初始化順序表

void seqlistpushfront(seqlist* seqlist, datatype value);//頭插

void seqlistpushback(seqlist* seqlist, datatype value);//尾插

void seqlistpopfront(seqlist* seqlist);//頭刪

void seqlistpopback(seqlist* seqlist);//尾刪

void seqlisterase(seqlist* seqlist);//任意位置刪

void seqlistinsert(seqlist* seqlist, int pos, datatype value);//任意位置插入

datatype seqlistread(seqlist* seqlist, int pos);//讀取任意位置元素,並返回元素值

void seqlistchange(seqlist* seqlist, int pos, datatype value);//更改任意位置元素值

datatype seqlistfindi(seqlist* seqlist, datatype value);//查詢任意位置陣列元素,並返回陣列下標

test.c

#define _crt_secure_no_warnings

#include#include#include "test.h"

void seqlistprint(seqlist* seqlist)//列印順序表中的陣列

int i = 0;

int len = 0;

len = seqlist->size;

for (i = 0; i < len; i++)

printf("\n");

}void seqlistinit(seqlist* seqlist)//初始化順序表

memset(seqlist->arr, 0, max_size*sizeof(datatype));

seqlist->size = 0;

}void seqlistpushfront(seqlist* seqlist, datatype value)//頭插

if (seqlist->size == max_size)

int i = seqlist->size;

for (; i > 0; i--)

seqlist->arr[0] = value;

(seqlist->size)++;

}void seqlistpopfront(seqlist* seqlist)//頭刪

if (seqlist->size == 0)

int i = 0;

for (i = 1; i < seqlist->size; i++)

seqlist->size--;

}void seqlistpushback(seqlist* seqlist, datatype value) //尾插

if (seqlist->size == max_size)

seqlist->arr[seqlist->size] = value;

seqlist->size++;

}void seqlistpopback(seqlist* seqlist)//尾刪

if (seqlist->size == 0)

seqlist->size--;

}void seqlistinsert(seqlist* seqlist, int pos, datatype value)//任意位置插入

if (pos > seqlist->size)

if (seqlist->size == max_size)

int i = seqlist->size-1 ;

for (; i>=pos-1; --i)

seqlist->arr[pos-1] = value;

seqlist->size++;

return;

}void seqlisterase(seqlist* seqlist,int pos)//任意位置刪

if (seqlist->size == 0)

if (pos > seqlist->size)

int i =pos ;

for ( ; i < seqlist->size; i++)

seqlist->size--;

}datatype seqlistread(seqlist* seqlist, int pos)//讀取任意位置元素,並返回元素值

if (seqlist->size == 0)

if ((pos >= seqlist->size) || (pos<0))

else

printf("%d", seqlist->arr[pos]);

return seqlist->arr[pos];

}void seqlistchange(seqlist* seqlist, int pos, datatype value)//更改任意位置元素值

if ((pos >= seqlist->size)||(pos<0))

else

printf("%d\n", seqlist->arr[pos]);

seqlist->arr[pos] = value;

return;

}datatype seqlistfindi(seqlist* seqlist, int pos)//查詢任意位置陣列元素,並返回陣列下標

if (seqlist->size == 0)

if ((pos >= seqlist->size) || (pos<0))

else

return pos ;

}

main.c

#define _crt_secure_no_warnings

#include "test.h"

void test1()//任意位置插入的測試

void test2()//讀取任意位置元素,並返回元素值

void test3()//更改任意位置元素值

void test4()

void testseqlistpush()

int main()

簡單的順序表就寫到這了,後期會繼續完善的!!!!

c語言實現靜態順序表

標頭檔案如下 ifndef s l define s l include include include pragma warning disable 4996 define max size 10 typedef int datatype typedef struct seqlist seqlis...

C語言實現靜態順序表

靜態順序表是儲存在乙個連續的陣列中的,因此對其資料型別有乙個結構體宣告。尾插 void seqpushback seqlist pseq,datatype x pseq a pseq size x 尾刪 void seqpopback seqlist pseq 頭插 void seqpushfron...

C語言實現順序表 靜態

ifndef seqlist h define seqlist h typedef int datatype define max size 10 順序表的容量,可調整 typedef struct seqlist seqlist void seqlistinit seqlist pseq 初始化 ...