C語言實現動態順序表

2021-09-01 13:34:26 字數 4585 閱讀 3210

關鍵知識點:

動態順序表的儲存是以動態陣列的方式,它比之靜態順序表,在空間的開闢上,更加的靈活。避免了靜態順序表的定長陣列儲存方式而導致空間開闢小了不夠用,開闢大了造成記憶體浪費的特點。根據實際需要,自己掌控對記憶體空間大小的分配。因而動態順序表在實際應用中更加廣泛。

對順序表的主要操作:

初始化順序表

順序表的尾插

順序表的尾刪

順序表的頭插

順序表的頭刪

任意位置插入元素

任意位置刪除元素

查詢某個元素第一次出現的的位置

刪除某個值為data的元素

刪除全部的值為data的元素

順序表的排序(氣泡排序)

清空順序表

列印順序表

實現**(這裡以c語言來實現)

seqlist.h

#include#include#include#include#include#includetypedef int datatype;

// 動態順序表的結構

typedef struct seqlist

seqlist, *pseqlist;

// 初始化順序表

void seqlistinit(pseqlist ps, int capacity);

//增刪查改

// 在順序表尾部插入元素data

void seqlistpushback(pseqlist ps, datatype data);

// 刪除順序表中最後的乙個元素

void seqlistpopback(pseqlist ps);

// 在順序表的頭部插入元素data

void seqlistpushfront(pseqlist ps, datatype data);

// 刪除順序表的頭部元素

void seqlistpopfront(pseqlist ps);

// 在順序表的pos位置插入元素data

void seqlistinsert(pseqlist ps, int pos, datatype data);

// 刪除順序表中pos位置上的元素

void seqlisterase(pseqlist ps, int pos);

// 在順序表中找data元素第一次出現的位置

int seqlistfind(pseqlist ps, datatype data);

// 刪除順序表中值為data的元素

void seqlistremove(pseqlist ps, datatype data);

// 獲取順序表中有效元素的個數

int seqlistsize(pseqlist ps);

// 獲取順序表的容量

int seqlistcapacity(pseqlist ps);

// 獲取順序表中第乙個元素

datatype seqlistfront(pseqlist ps);

// 獲取順序表中最後乙個元素

datatype seqlistback(pseqlist ps);

// 清空順序表中有效元素的個數

void seqlistclear(pseqlist ps);

// 銷毀順序表

void seqlistdestroy(pseqlist ps);

// 檢測容量

void checkcapacity(pseqlist ps);

// 刪除順序表中所有值為data的元素

void seqlistremoveall(pseqlist ps, datatype data);

// 用氣泡排序的方式對順序表中的元素進行排序

void bubblesort(pseqlist ps);

//列印順序表

void printseqlist(pseqlist ps);

//void testseqlist();

seqlist.c

#include"seqlist.h"

// 初始化順序表

void seqlistinit(pseqlist ps, int capacity) }

ps->_capacity=capacity;

ps->_size = 0;

ps->_pdata[0] = 0;

printf("初始化後順序表大小為%d\n", capacity);

return;

}// 在順序表尾部插入元素data

void seqlistpushback(pseqlist ps, datatype data)

// 刪除順序表中最後的乙個元素

void seqlistpopback(pseqlist ps)

// 在順序表的頭部插入元素data

void seqlistpushfront(pseqlist ps, datatype data)

ps->_size++;

ps->_pdata[0] = data;

//先將元素依次後置一位,在空出的頭部新增新元素data

}// 刪除順序表的頭部元素

void seqlistpopfront(pseqlist ps)

ps->_size--; }

// 在順序表的pos位置插入元素data

void seqlistinsert(pseqlist ps, int pos, datatype data)

//將pos位之後的元素前置

for (int i = ps->_size - 1; i > pos; i--)

ps->_pdata[pos] = data;

ps->_size++;

}// 刪除順序表中pos位置上的元素

void seqlisterase(pseqlist ps, int pos)

//將pos位之後的元素後置

for (int i = ps->_size - 1; i > pos; i--)

ps->_pdata[pos] = ps->_pdata[pos+1];

ps->_size--;

}// 在順序表中找data元素第一次出現的位置

int seqlistfind(pseqlist ps, datatype data)

}printf("沒找見這個元素\n");

return -1;

}// 刪除順序表中值為data的元素

void seqlistremove(pseqlist ps, datatype data)

memcpy(ps->_pdata, pdata, sizeof(datatype)*count);

ps->_size = count;

free(pdata);

//方法2:一次遍歷,無需輔助空間

int count = 0;

for (int i = 0; i < ps->_size; ++i)

ps->_size -= count;//更新size大小

}// 獲取順序表中有效元素的個數

int seqlistsize(pseqlist ps)

// 獲取順序表的容量

int seqlistcapacity(pseqlist ps)

// 獲取順序表中第乙個元素

datatype seqlistfront(pseqlist ps)

// 獲取順序表中最後乙個元素

datatype seqlistback(pseqlist ps)

// 清空順序表中有效元素的個數

void seqlistclear(pseqlist ps)

// 銷毀順序表

void seqlistdestroy(pseqlist ps)

}// 檢測容量

void checkcapacity(pseqlist ps)

//需要擴容,暫定擴容兩倍

int newcapacity = ps->_capacity * 2;

pseqlist* newpdata = (datatype*)malloc(sizeof(datatype)*newcapacity*2);//開闢空間

assert(newpdata);

//搬移老的資料到新的陣列

for (int i = 0; i < ps->_size; i++)

//釋放舊的陣列

free(ps->_pdata);

//更新容量

ps->_capacity = newcapacity;

}// 刪除順序表中所有值為data的元素

void seqlistremoveall(pseqlist ps, datatype data)

}// 用氣泡排序的方式對順序表中的元素進行排序

void bubblesort(pseqlist ps)

} }if (!ischange)//沒有進行交換,說明陣列本就是有序的

return;

}//列印順序表

void printseqlist(pseqlist ps)

printf("\n");

}//

C語言實現動態順序表

include include include include ifndef list h define list h define default 3 初始化開闢容量大小 define int sz 2 每次固定增容大小 typedef int datatype typedef struct se...

動態順序表c語言實現

主要操作結構體中的指標,在init函式裡對指標進行記憶體開闢,checkcapacity函式在每次插入之前檢查一遍,如果可用空間沒有了,就開闢當前最大容量的兩倍。其他操作與靜態順序表無大區別。seqlist.h pragma once define datatype int typedef stru...

C語言實現順序表

標頭檔案部分 include include include typedef int datatype define maxsize 10 typedef struct seqlist seqlist 列印順序表的內容 void printseqlist seqlist seq 初始化順序表 voi...