定长顺序表
頭文件
#pragma once#define SIZE 10 typedef struct SeqList {int elem[SIZE];//保存數據int length;//有效數據個數 }SeqList,*PSeqList ;//typedef SeqList* PSeqList;//PSeqList == SeqList*void InitSeqList(PSeqList plist);//初始化bool Insert(PSeqList plist,int pos,int val);//在指定位置插入元素int Search(PSeqList plist,int key);//查找元素bool DeleteVal(PSeqList plist,int key);//刪除元素bool Deletepos(PSeqList plist,int pos,int *rtval);//刪除位置位//rtval:輸出參數,保存刪除成功void Show(PSeqList plist);//打印bool IsEmpty(PSeqList plist);//判空bool IsFull(PSeqList plist);//判滿 //獲取迫使下標儲存的數據 bool GetVal(PSeqList plist,int pos,int val); //修改pos下標的數據 bool SetVal(PSeqList plist,int pos,int newval); //獲取關鍵字前驅的值 bool GetPriVal(PSeqList plist,int key,int *rtval); //獲取關鍵字后繼的值 bool GetNextVal(PSeqList plist,int key,int *rtval); //獲取當前長度 int GetLength(PSeqList plist); //清空所有數據 void Clear(PSeqList plist); //銷毀順序表 void Destory(PSeqList plist);?
cpp文件?
#include<stdio.h> #include<assert.h> #include"seqlist.h"void InitSeqList(PSeqList plist)//初始化 {assert(plist != NULL);plist->length = 0; }bool Insert(PSeqList plist,int pos,int val)//在指定位置插入元素 {assert(plist != NULL);if(pos < 0 || pos > plist->length || plist ->length == SIZE){return false;}//移動數據for(int i =plist-> length-1; i>=pos;i--){plist->elem[i+1] = plist->elem[i];}//插入新數據plist->elem[pos] = val;//更新新數據plist->length ++; }int Search(PSeqList plist,int key)//查找元素 {assert(plist != NULL);for(int i = 0;i<plist->length-1;i++){if(plist->elem[i] == key){return i;//找到返回下標}}return -1;//找不到返回-1 }//刪除位置位 //rtval:輸出參數,保存刪除成功 bool DeletePos(PSeqList 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 --;return true; }bool DeleteVal(PSeqList plist,int key)//刪除元素 {int i = Search(plist,key);if( i < 0 ){return false;}return DeletePos(plist,i,NULL);}void Show(PSeqList plist)//打印 {assert(plist != NULL);for(int i=0;i <plist->length;i++){printf("%d ",plist->elem[i]);}printf("\n"); }bool IsEmpty(PSeqList plist)//判空 {return plist->length ==0; }static bool IsFull(PSeqList plist)//判滿 {return plist->length == SIZE; } //獲取pos下標儲存的數據 bool GetVal(PSeqList 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下標的數據 bool SetVal(PSeqList plist,int pos,int newval) {assert(plist != NULL);if(pos<0 || pos>=plist->length){return false;}plist->elem[pos] = newval;return true; } bool GetPriVal(PSeqList 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; }bool GetNextVal(PSeqList 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; }int GetLength(PSeqList plist) {return plist->length; }void Clear(PSeqList plist) {plist->length = 0; }void Destory(PSeqList plist) {Clear(plist); }主函數
#include"seqlist.h" #include"stdio.h"int main() {SeqList seq;InitSeqList(&seq);for(int i = 0;i<20;i++){Insert(&seq,i,i);}Show(&seq);Search(&seq,7);//查找元素DeleteVal(&seq,7);//刪除元素Show(&seq);Insert(&seq,3,30);Show(&seq);Clear(&seq);Show(&seq);return 0; }?
總結
- 上一篇: centos7 安装mysql php_
- 下一篇: ul 原点显示_CSS+HTML ul