不定长顺序表
頭文件
pragma once#define INIT_SIZE 10typedef struct DSeqList {int *elem;//指向保存數(shù)據(jù)的內(nèi)存int length;//有效數(shù)據(jù)個(gè)數(shù)int listsize;//總格子數(shù) }DSeqList;typedef DSeqList * PDSeqList;//初始化函數(shù) void InitDSeqList(PDSeqList plist);//往plist的pos位置插入數(shù)據(jù)val bool Insert(PDSeqList plist,int pos,int val);//打印 void Show(PDSeqList plist);//判空 bool IsEmpty(PDSeqList plist);//bool IsFuLL; ////查找,找到了返回下標(biāo),沒(méi)有找到返回-1 int Search(PDSeqList plist,int key);//刪除 bool DeleteVal(PDSeqList plist,int key);//刪除位置值 //rtval:輸出參數(shù),保存刪除成功的數(shù)據(jù) bool DeletePos(PDSeqList plist,int pos,int *rtval);//獲取pos下標(biāo)存儲(chǔ)的數(shù)據(jù) bool GetVal(PDSeqList plist,int pos,int *rtval);//修改pos下標(biāo)的數(shù)據(jù) bool SetVal(PDSeqList plist,int pos,int newval);//獲取val的前趨值 bool GetPriVal(PDSeqList plist,int key,int *rtval);//獲取val的后繼值 bool GetNextVal(PDSeqList plist,int key,int *rtval);//長(zhǎng)度,即有效數(shù)據(jù)個(gè)數(shù) int GetLength(PDSeqList plist);//清除所有數(shù)據(jù) void Clear(PDSeqList plist);//銷(xiāo)毀 void Destroy(PDSeqList plist);cpp文件
#include"dseqlist.h" #include<stdio.h> #include<stdlib.h> #include<assert.h>//初始化函數(shù) void InitDSeqList(PDSeqList plist) {assert(plist != NULL);if(plist == NULL){return ;}plist->elem = (int *) malloc (INIT_SIZE*sizeof(int));plist->length = 0;plist->listsize = INIT_SIZE; } static bool IsFull(PDSeqList plist) {return plist ->length == plist->listsize; }//總?cè)萘繑U(kuò)大到原來(lái)的2倍 static void Inc(PDSeqList plist) {//plist->elem = (int *) malloc (INIT_SIZE*2*sizeof(int));//errorplist->elem = (int *) realloc(plist->elem,2*plist->listsize*sizeof(int));plist->listsize *= 2; }//往plist的pos位置插入數(shù)據(jù)val bool Insert(PDSeqList plist,int pos,int val) {assert(plist != NULL);if(pos <0 || pos >plist->length)// !!!{return false;}if(IsFull(plist)){Inc(plist);}for(int i =plist->length-1; i>=pos;i--)//!!!{plist->elem[i+1] = plist->elem[i];}plist->elem[pos] = val;plist->length++;return true; }//打印 void Show(PDSeqList plist) {for(int i= 0;i<plist->length;i++){printf("%d ",plist->elem[i]);}printf("\n"); }//判空 bool IsEmpty(PDSeqList plist) {return plist->length == 0; }static bool IsFuLL(PDSeqList plist) {return plist->length == plist->listsize ; }//查找,找到了返回下標(biāo),沒(méi)有找到返回-1 int Search(PDSeqList plist,int key) {assert(plist != NULL );for(int i= 0;i<plist->length-1;i++){if(plist->elem[i] == key){return i;}}return -1; }//刪除 bool DeleteVal(PDSeqList plist,int key) {int i = Search(plist,key);if(i == -1){return false;}return DeletePos(plist,i,NULL); }//刪除位置值 //rtval:輸出參數(shù),保存刪除成功的數(shù)據(jù) bool DeletePos(PDSeqList plist,int pos,int *rtval) {assert(plist != NULL);if(pos < 0 || pos >=plist->length){return false;}if(rtval != NULL){*rtval = plist->elem[pos];}for(int i = pos;i<plist->length-1;i++){plist->elem[i] = plist->elem[i+1];}plist->length --; }//獲取pos下標(biāo)存儲(chǔ)的數(shù)據(jù) bool GetVal(PDSeqList plist,int pos,int *rtval) {assert(plist != NULL);if(pos < 0 || pos >=plist->length){return false;}if(rtval != NULL){*rtval = plist->elem[pos];}return true; }//修改pos下標(biāo)的數(shù)據(jù) bool SetVal(PDSeqList plist,int pos,int newval) {assert(plist != NULL);if(pos < 0 || pos >=plist->length){return false;}plist->elem[pos] = newval;return true; }//獲取val的前趨值 bool GetPriVal(PDSeqList plist,int key,int *rtval) {int i = Search(plist,key);if(i <= 0){return false;}if(rtval != NULL){*rtval = plist->elem[i-1];}return true; }//獲取val的后繼值 bool GetNextVal(PDSeqList plist,int key,int *rtval) {int i = Search(plist,key);if(i <0 || i>=plist->length-1){return false;}if(rtval != NULL){*rtval = plist->elem[i+1];}return true;}//長(zhǎng)度,即有效數(shù)據(jù)個(gè)數(shù) int GetLength(PDSeqList plist) {return plist->length; }//清除所有數(shù)據(jù) void Clear(PDSeqList plist) {plist->length = 0; }//銷(xiāo)毀 void Destroy(PDSeqList plist) {free(plist->elem); }主函數(shù)
#include<stdio.h> #include<stdlib.h> #include"dseqlist.h"int main() {DSeqList dseq;InitDSeqList(&dseq);for(int i= 0;i<40;i++){Insert(&dseq,i,i);}Show(&dseq);DeletePos(&dseq,5,NULL);Show(&dseq);Destroy(&dseq);Clear(&dseq);Show(&dseq);return 0; }?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: android 部分区域点击,Andro
- 下一篇: python history函数_pyt