日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

线性表的C/C++实现(数据结构 严蔚敏版)

發(fā)布時(shí)間:2025/3/20 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性表的C/C++实现(数据结构 严蔚敏版) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

下面的代碼是項(xiàng)目文件:一個(gè)頭文件、一個(gè)源文件、一個(gè)測(cè)試文件

1、頭文件List.h:

#include<iostream> using namespace std; #include<malloc.h>/*定義數(shù)據(jù)的類(lèi)型,可以通過(guò)修改這里的數(shù)據(jù)類(lèi)型,來(lái)實(shí)現(xiàn)不同類(lèi)型的線(xiàn)性表 下面的數(shù)據(jù)類(lèi)型可以更改,const引用是限制被調(diào)用的函數(shù),不能修改主程序的數(shù)據(jù),但可以查看,達(dá)到保護(hù)主程序數(shù)據(jù)安全。 不需要執(zhí)行修改操作,而只要查看數(shù)據(jù)的線(xiàn)性表就用const限制 引用 */ typedef int Status; typedef int ElemType;#define LIST_INIT_SIZE 10 //初始化的空間分配容量 #define LIST_ADD 10 //每次增加的分配空間增量 #define ok 1 #define error 0 #define flow 0//定義一個(gè)線(xiàn)性表結(jié)構(gòu),結(jié)構(gòu)內(nèi)有分配空間的基地址,分配空間的總長(zhǎng)度,當(dāng)前使用空間的大小。 typedef struct{ElemType* elem; //空間基地址 int length; //當(dāng)前已經(jīng)使用的空間的長(zhǎng)度 int listsize; //當(dāng)前分配的空間長(zhǎng)度 }SqList;//初始化線(xiàn)性表 Status InitList(SqList& L); //打印線(xiàn)性表 Status Print(SqList L);//銷(xiāo)毀線(xiàn)性表 Status DestroyList(SqList& L);//將線(xiàn)性表清空 Status ClearList(SqList& L);//判斷線(xiàn)性表是否為空 Status ListEmpty(const SqList& L);//返回線(xiàn)性表中元素的個(gè)數(shù) Status ListLength(const SqList& L);//獲取線(xiàn)性表中的第i個(gè)元素的值 Status Get(const SqList& L, int i, ElemType& e); //如果當(dāng)前元素cur_e不是第一個(gè)數(shù)據(jù),就pre_e返回它的前一個(gè)數(shù)據(jù)的值,否則返回error Status PriorElem(const SqList& L, ElemType cur_e, ElemType& pre_e);//如果當(dāng)前元素不會(huì)最后一個(gè),就用next_e返回它的后一個(gè)數(shù)值,否則返回error Status NextElem(const SqList& L, ElemType cur_e, ElemType& next_e);//在第i個(gè)位置前插入數(shù)據(jù)e, 數(shù)據(jù)長(zhǎng)度加一 Status ListInsert(SqList& L, int i, ElemType e);// 刪除i個(gè)位置的數(shù)據(jù),數(shù)據(jù)長(zhǎng)度減一,并返回?cái)?shù)據(jù) Status ListDelete(SqList& L, int i, ElemType& e);//合并線(xiàn)性表LA和LB,將結(jié)果放入LA中 Status Union(SqList& LA, const SqList& B); //合并線(xiàn)性表 Status MergeList(const SqList& LA, const SqList& LB, SqList& LC); //查詢(xún)數(shù)據(jù)的位置 int LocateElem(const SqList& L, ElemType e);//插入n個(gè)數(shù)據(jù) Status Insert(SqList& L, int n);

2、源文件List.cpp:

#include "List.h" //這是功能實(shí)現(xiàn)源文件,其他程序可以通過(guò)頭文件包含,使用這里的功能 //初始化線(xiàn)性表 Status InitList(SqList& L){L.elem = (ElemType* )(malloc( LIST_INIT_SIZE * sizeof(ElemType)));//如果地址分配錯(cuò)誤,就返回0 if(!L.elem) exit(error);//將當(dāng)前長(zhǎng)度設(shè)置為0,分配長(zhǎng)度設(shè)置為初始長(zhǎng)度 L.length = 0;L.listsize = LIST_INIT_SIZE;return ok;}//銷(xiāo)毀線(xiàn)性表 Status DestroyList(SqList& L){//如果地 if(!L.elem){cout<<"線(xiàn)性表不存在"<<endl;}else{free(L.elem);L.elem = NULL;}return ok; } //打印線(xiàn)性表 Status Print(SqList L){cout<<"線(xiàn)性表的數(shù)據(jù)如下:"<<endl;if(L.length == 0){cout<<"線(xiàn)性表為空表, 請(qǐng)插入數(shù)據(jù)后再來(lái)打印數(shù)據(jù)\n\n"<<endl;}for(int i=0; i<L.length; i++){cout<<L.elem[i]<<" ";}cout<<endl; } //將線(xiàn)性表清空 Status ClearList(SqList& L){//如果線(xiàn)性表的當(dāng)前長(zhǎng)度不為0,就將數(shù)據(jù)全部清空,當(dāng)前長(zhǎng)度設(shè)置為0 if(L.length != 0){for(int i=0; i<L.length; i++){L.elem[i] = 0;}L.length = 0;}return ok; }//判斷線(xiàn)性表是否為空 Status ListEmpty(const SqList& L){if(L.length != 0){//不為空表 return ok;}else{//為空表 return error;} }//返回線(xiàn)性表中元素的個(gè)數(shù) Status ListLength(const SqList& L){return L.length; } //獲取線(xiàn)性表中的第i個(gè)元素的值 Status Get(const SqList& L, int i, ElemType& e){if(i > L.length || i < 0){cout<<"輸入有誤,退出"<<endl;return error;}else{e = L.elem[i-1];return ok;} }//如果當(dāng)前元素cur_e不是第一個(gè)數(shù)據(jù),就pre_e返回它的前一個(gè)數(shù)據(jù)的值,否則返回error Status PriorElem(const SqList& L, ElemType cur_e, ElemType& pre_e){int flag = LocateElem(L, cur_e);if(flag == -1){cout<<"找不到數(shù)據(jù)"<<endl; return error;}if(flag == 0){cout<<"數(shù)據(jù)不存在直接前驅(qū)"<<endl; }else{pre_e = L.elem[flag-1];}} //如果 當(dāng)前元素不會(huì)最后一個(gè),就用next_e返回它的后一個(gè)數(shù)值,否則返回error Status NextElem(const SqList& L, ElemType cur_e, ElemType& next_e){int flag = LocateElem(L, cur_e);if(flag = -1){cout<<"數(shù)據(jù)不存在"<<endl; }else if(flag == L.length){cout<<"該數(shù)據(jù)不存在直接后繼"<<endl;}else{next_e = L.elem[flag+1];} } //在第i個(gè)位置前插入數(shù)據(jù)e, 數(shù)據(jù)長(zhǎng)度加一 Status ListInsert(SqList& L, int i, ElemType e){if(i<1 || i > L.length+1) {cout<<"輸入的位置有問(wèn)題"<<endl; return error;}if(L.length == L.listsize){//增加LIST_ADD長(zhǎng)度的地址空間 L.elem = (ElemType*)(realloc(L.elem, (LIST_ADD) * sizeof(ElemType)));if(!L.elem) exit(flow); //更新分配的長(zhǎng)度 L.listsize = L.listsize + LIST_ADD;//取要插入位置的地址 ElemType* q = &(L.elem[i-1]);//如果地址p比插入的地址q大或則等于,就將數(shù)據(jù)復(fù)制到后面一位空間里面,空出地址q的存儲(chǔ)空間 for(ElemType* p = &(L.elem[L.length-1]); p>= q; p--){*(p+1) = *p;} //給地址空間q賦值 *q = e;//當(dāng)前長(zhǎng)度+1 L.length++;}else{//如果分配空間沒(méi)有使用完,執(zhí)行下面操作//取要插入位置的地址 ElemType* q = &(L.elem[i-1]);//如果地址p比插入的地址q大或則等于,就將數(shù)據(jù)復(fù)制到后面一位空間里面,空出地址q的存儲(chǔ)空間 for(ElemType* p = &(L.elem[L.length-1]); p>= q; p--){*(p+1) = *p;} //給地址空間q復(fù)制 *q = e;//當(dāng)前長(zhǎng)度+1 L.length++;}return ok;} // 刪除i個(gè)位置的數(shù)據(jù),數(shù)據(jù)長(zhǎng)度減一,并返回?cái)?shù)據(jù) Status ListDelete(SqList& L, int i, ElemType& e){if(i > L.length || i<0){cout<<"你刪除的數(shù)據(jù)不存在\n\n"<<endl;return error; }else{ElemType* q = &L.elem[i-1];e = *q;q = &L.elem[L.length-1];for(ElemType* p = &L.elem[i-1]; p<= q; p++){*p = *(p+1);}L.length--;cout<<"刪除成功\n\n"<<endl;return ok;} } //合并線(xiàn)性表,將LA和LB合并后的結(jié)果替換為L(zhǎng)A Status Union(SqList& LA, const SqList& LB){int LA_length = LA.length;int LB_length = LB.length;ElemType e;for(int i=0; i<= LB_length; i++){//獲取LB的第i個(gè)位置的數(shù)據(jù) Get(LB, i, e);for(int i=0; i<LB_length; i++){//在LA中查詢(xún)數(shù)據(jù)e是否存在,不存在就返回i,存在就返回-1 int index = LocateElem(LA, e);//不為-1就在LA中插入數(shù)據(jù) e if(index != -1){ListInsert(LA, ++LA.length, e); }} } cout<<"線(xiàn)性表合并完成, 查看第一個(gè)線(xiàn)性表可以查看合并后的數(shù)據(jù)"<<endl;return ok; } //合并有序線(xiàn)性表,并排序,將結(jié)果放有序入LC中 Status MergeList(const SqList& LA, const SqList& LB, SqList& LC){InitList(LC);int i, j, k;i = j = 1;k = 0;ElemType a, b;int la_length = LA.length; int lb_length = LB.length;while((i <= la_length) && (j <= lb_length)){Get(LA, i, a); Get(LB, j, b);if(a <= b){{ListInsert(LC, ++k, a);i++;}}else{ListInsert(LC, ++k, b);j++;}}while(i <= la_length){Get(LA, i++, a);ListInsert(LC, ++k, a);}while(j <= lb_length){Get(LB, j++, b);ListInsert(LC, ++k, b);}} //查詢(xún)某個(gè)數(shù)據(jù)e的位置 int LocateElem(const SqList& L, ElemType e){if(L.length == 0){return -1;}for(int i=0; i<L.length; i++){if(L.elem[i] == e){return i+1;}else{return -1;}}} //插入n個(gè)數(shù)據(jù)Status Insert(SqList& L, int n){ElemType e;if(n + L.length > L.listsize){L.elem = (ElemType*)(realloc(L.elem, (LIST_ADD) * sizeof(ElemType)));//如果地址分配失敗,就返回錯(cuò)誤 if(!L.elem) return error;L.listsize = L.listsize + LIST_ADD;}cout<<"請(qǐng)輸入你要插入的"<<n<<"數(shù)據(jù)"<<endl;for(int i=L.length; i<n; i++){cin>> L.elem[i];}cout<<"數(shù)據(jù)插入完成\n\n"<<endl; L.length = L.length + n;return ok;}

3、測(cè)試文件test.cpp:

#include <iostream> #include "List.h"/* run this program using the console pauser or add your own getch, system("pause") or input loop *///測(cè)試一個(gè)線(xiàn)性表功能 int main(int argc, char** argv) {SqList L;cout<<"請(qǐng)輸入你的操作"<<endl;cout<<" 0-----退出\n"<<endl;cout<<" 1-----初始化線(xiàn)性表\n"<<endl;int n;int i;ElemType e;//初始化線(xiàn)性表 InitList(L);while(1){cout<<"請(qǐng)輸入你的操作"<<endl;cin>>n;if(n>1 || n < 0){cout<<"你輸入的有問(wèn)題,請(qǐng)重新輸入"<<endl;}else{break;}} if(n == 0){cout<<"你已退出"<<endl;exit(flow);}//進(jìn)入操縱while(1){switch(n){case 0: //銷(xiāo)毀之后重新進(jìn)行初始化,并退出 DestroyList(L);cout<<"線(xiàn)性表銷(xiāo)毀成功\n\n"<<endl;cout<<"你已退出"<<endl;exit(flow); case 1://重新初始化線(xiàn)性表 if(L.elem){free(L.elem);cout<<"重新初始化成功,原來(lái)數(shù)據(jù)被清空\(chéng)n\n"<<endl;}InitList(L); break;case 2://查看線(xiàn)性表所有數(shù)據(jù) Print(L); break;case 3://數(shù)據(jù)插入 cout<<"請(qǐng)輸入你要插入的位置和數(shù)據(jù)\n"<<endl;cin>>i;cin>>e;if(ListInsert(L, i, e)){cout<<"插入成功\n\n"<<endl;} else{cout<<"插入失敗\n\n"<<endl;}break;case 4://刪除功能 cout<<"請(qǐng)輸入你要?jiǎng)h除的位置"<<endl;cin>>i;ListDelete(L, i, e);break;case 5://查詢(xún)數(shù)據(jù) cout<<"請(qǐng)輸入你要查詢(xún)的數(shù)據(jù)"<<endl;cin>>e;i = LocateElem(L, e);if(i != -1){cout<<"你查詢(xún)的數(shù)據(jù)是第"<<i<<"個(gè)位置\n\n"<<endl;}else{cout<<"你查詢(xún)的數(shù)據(jù)不存在\n\n"<<endl; }break;case 6://判斷線(xiàn)性表是否為空 if(!ListEmpty(L)){cout<<"線(xiàn)性表為空表\n\n"<<endl;}else{cout<<"線(xiàn)性表不為空\(chéng)n\n"<<endl;}break;}cout<<" 0-----退出,并銷(xiāo)毀線(xiàn)性表\n"<<endl;cout<<" 1-----重新初始化線(xiàn)性表\n"<<endl;cout<<" 2-----打印線(xiàn)性表\n"<<endl;cout<<" 3-----插入數(shù)據(jù)\n"<<endl;cout<<" 4-----刪除某個(gè)數(shù)據(jù)\n"<<endl;cout<<" 5-----查詢(xún)數(shù)據(jù)的位置\n"<<endl;cout<<" 6-----判斷線(xiàn)性表是否為空\(chéng)n"<<endl;cout<<"請(qǐng)輸入你的操作"<<endl;//控制操作輸入 while(1){//輸入操作方式 cin>>n;cout<<endl;if(n>6 || n < 0){cout<<"你輸入的有問(wèn)題,請(qǐng)重新輸入"<<endl;}else{break;}} }return 0; }


總結(jié)

以上是生活随笔為你收集整理的线性表的C/C++实现(数据结构 严蔚敏版)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆成人网 | av免费网站在线观看 | 国产福利91精品 | 三及毛片 | 特黄老太婆aa毛毛片 | 成人无码一区二区三区 | 久久九九久精品国产免费直播 | 国产视频分类 | 亚洲精品无码久久久久久久 | 免费观看日韩毛片 | 国产做受高潮动漫 | 久久久福利视频 | 亚洲综合图片网 | 可以看的毛片 | 美女试爆场恐怖电影在线观看 | 成人wwwww免费观看 | 国产精品偷拍 | 操亚洲美女 | 97人妻精品一区二区 | 涩涩片影院 | 日韩亚洲国产精品 | 国产福利精品在线 | av网在线 | 国产精品久久午夜夜伦鲁鲁 | 亚洲AV无码精品一区二区三区 | 成年人在线视频观看 | 少妇激情偷人爽爽91嫩草 | 在线观看国产精品视频 | 久久人人爽天天玩人人妻精品 | 亚洲aⅴ在线 | 天堂精品在线 | 自拍偷拍21p | 国产日韩一级 | 国产123区在线观看 91国产一区二区 | 日韩精品高清视频 | 国产精品成人电影在线观看 | av黄色小说 | 成人小视频在线 | 国产伦精品一区二区三区视频女 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 欧美成人一区在线 | 国产最新在线 | 婷婷精品在线 | 国产欧美精品一区二区色综合 | 精品裸体舞一区二区三区 | 久久露脸国语精品国产91 | 日韩精品资源 | 特级黄色录像 | 成年人看的黄色 | 中字幕视频在线永久在线观看免费 | 亚洲天堂视频网站 | 毛片免| 午夜精品一二三区 | 欧美入口 | 超爽视频| 美女扒开下面让男人捅 | 免费在线看a | 大牛影视剧免费播放在线 | 日韩不卡视频在线观看 | 黄色av资源| 午夜精品久久久久久久四虎美女版 | 少妇一级淫片免费观看 | 久久精品国产亚洲av麻豆图片 | 黄色av网址大全 | 91欧美一区二区 | 亚洲黄色影视 | 国产一级影片 | 久操久热 | av在线综合网 | 日韩精品电影在线观看 | 日本大乳奶做爰 | 538国产精品视频一区二区 | 亚洲国产精品99久久 | 国产色秀| 久久免费视频网 | 日日爱669 | 日韩一区二区三区中文字幕 | 性歌舞团一区二区三区视频 | 亚洲欧美天堂 | 五月婷婷色丁香 | 国产一级色 | 欧美一区二区三区四区视频 | 成人激情综合 | 久久精品久 | 37p粉嫩大胆色噜噜噜 | 人人插人人 | 日韩精品一区二区三区网站 | 成人特级毛片 | 伦伦影院午夜理伦片 | 国产成人综合欧美精品久久 | 中国女人毛片 | 日韩成人在线观看 | 免费看毛片的网站 | 亚洲视频精品在线 | 最近中文字幕在线观看视频 | 精品免费久久 | 精品一区二区在线免费观看 | 91精品国产综合久久久蜜臀图片 | 亚洲AV无码国产精品播放在线 |