關鍵知識點:
動態順序表的儲存是以動態陣列的方式,它比之靜態順序表,在空間的開闢上,更加的靈活。避免了靜態順序表的定長陣列儲存方式而導致空間開闢小了不夠用,開闢大了造成記憶體浪費的特點。根據實際需要,自己掌控對記憶體空間大小的分配。因而動態順序表在實際應用中更加廣泛。
對順序表的主要操作:
初始化順序表
順序表的尾插
順序表的尾刪
順序表的頭插
順序表的頭刪
任意位置插入元素
任意位置刪除元素
查詢某個元素第一次出現的的位置
刪除某個值為data的元素
刪除全部的值為data的元素
順序表的排序(氣泡排序)
清空順序表
列印順序表
實現**(這裡以c語言來實現)
seqlist.h
seqlist.c#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();
#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...