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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

顺序表的应用__电话本

發(fā)布時間:2024/7/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序表的应用__电话本 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

順序表的建立及使用

順序表: 就所謂的數(shù)組式操作
編程實現(xiàn)順序存儲結(jié)構(gòu)中的基本操作的實現(xiàn)(電話本的建立、插入、刪除、修改、逆置、查找、輸出)
整個操作過于簡陋, 只對上述功能做敘述, 采用結(jié)構(gòu)體數(shù)組實現(xiàn), 本打算用class操作, 可因為某種原因就擱置了………..
代碼中的注釋部分是用于測試數(shù)據(jù), 電話本只存有number, name

//size全局變量表示電話本當前大小不包含0位置,0號位置作為中間變量處理, 重新申請中間變量太麻煩了就省略 // #include<cstdio> #include<cstring> #define MAXSIZE 100 #define null 0int size=0; //表示當前電話本中有幾個聯(lián)系人的信息typedef struct{char name[10];char number[12]; }telephone;telephone t[MAXSIZE];//創(chuàng)建結(jié)構(gòu)體數(shù)組的時候,可采用new,此處對此操作省略 void create(); int find(int lo,int hi,telephone t[],char* target_value); void insert(telephone t[],int size); void display(telephone t[],int size); void convert(telephone t[],int size); void create(){int t_size;printf("輸入需要創(chuàng)建的電話本大小");scanf("%d",&t_size);insert(t,t_size+1); // printf("%d\n",size); }int find(int lo,int hi,telephone t[],char target_value[]){//使用二分查找if(lo>=hi)return null;//遞歸基 if(strcmp(target_value,t[(lo+hi)/2].name)==0) //遞歸基 return (lo+hi)/2;if(strcmp(target_value,t[(lo+hi)/2].name)>0)return find((lo+hi)/2+1,hi,t,target_value);else if(strcmp(target_value,t[(lo+hi)/2].name)<0)return find(lo,(lo+hi)/2,t,target_value);} //在插入的過程中使用插入排序,以便于find操作 void insert(telephone t[],int t_size){int i,j;for(i=size+1;i<t_size;i++){printf("輸入姓名,電話\n"); scanf("%s%s",t[i].name,t[i].number);//t[0]為哨兵,作為每次插入的中間變量strcpy(t[0].name,t[i].name);//哨兵元素每次表示要插入的元素(該元素先插到數(shù)組的尾部)strcpy(t[0].number,t[i].number);j=i-1;//此時的j表示待插入元素的前一個元素 //待插入的元素比哨兵元素小,進行移動覆蓋,查找到比哨兵元素小的值時//將哨兵元素放到此位置while((strcmp(t[j].name,t[0].name)>0)){strcpy(t[j+1].name,t[j].name);strcpy(t[j+1].number,t[j].number);j--;}//此處的j指向剛插入的元素的位置 strcpy(t[j+1].name,t[0].name);//哨兵放置 strcpy(t[j+1].number,t[0].number); ++size; //每插入一個人的信息,size增加一次 // printf("當前i=%d insert后size=%d\n",i,size); } // printf("insert后size=%d\n",size); return; }int remove(telephone t[],char* target_value,int t_size){ //在刪除的過程中出現(xiàn),將局部變量的值的名稱設(shè)置了和全局變量一致,出現(xiàn)size無法減少的情況 int i; int location=find(0,size,t,target_value); // printf("find=%d\n",location); if(location==0) return null;for(i=location;i<=size;i++){//將要刪除的元素進行覆蓋處理,令i=size,可實現(xiàn)將最后一個元素變?yōu)?#34;\0" strcpy(t[i].name,t[i+1].name);strcpy(t[i].number,t[i+1].number);} // strcpy(t[i].name,"\0"); // strcpy(t[i].number,"\0");//將要刪除的元素的name.number置為空串 // if(location==size){//判斷是否刪除最后一個元素,若是則需要進行對0號元素更新,防止insert出現(xiàn)錯誤// strcpy(t[0].name,t[i-1].name);// strcpy(t[0].number,t[i-1].number);//}size--;return location; // printf("remove后size=%d\n",size); }void display(telephone t[],int size){char c; //可在display中引入倒置, 此處不做敘述for(int i=1;i<=size;i++)printf("%d=姓名:%s, 號碼:%s\n",i,t[i].name,t[i].number);return; }void convert(telephone t[],int size){//倒置處理for(int i=1;i<=size/2;i++){strcpy(t[0].name,t[i].name);strcpy(t[i].name,t[size-i+1].name);strcpy(t[size-i+1].name,t[0].name);//name做倒置strcpy(t[0].number,t[i].number);strcpy(t[i].number,t[size-i+1].number);strcpy(t[size-i+1].number,t[0].number);//number倒置} }int main(){int i,key=1;char *c; //用于插入, 刪除時臨時的中間變量, 也可使用數(shù)組while(key){ printf("1-創(chuàng)建電話本\n 2-插入賬戶信息\n 3-查找號碼\n 4-刪除號碼\n 5-查看所有信息\n 6-將電話本倒置\n 7-關(guān)閉\n");scanf("%d",&i);switch(i){case 1:create();fflush(stdin);break;if(create_flag==1){ case 2:insert(t,size+2);fflush(stdin);break;//當執(zhí)行單步插入的時候形參要修改為在size的基礎(chǔ)上擴大1,但是t[0]并不存數(shù)據(jù),所以size+2處理 case 3:printf("輸入查找的元素,0表示查找失敗\n 查找的姓名:");scanf("%s",c);printf("所在的位置是%d\n",find(1,size,t,c));fflush(stdin);break;case 4:printf("輸入要刪除的元素,0表示刪除失敗\n 刪除的姓名:");scanf("%s",c);printf("刪除元素的位置是%d\n",remove(t,c,size));fflush(stdin);break;case 5:display(t,size);fflush(stdin);break;case 6:convert(t,size);fflush(stdin);break;}else printf("未創(chuàng)建電話本,不可刪除,查找,展示,倒置操作"); case 7: key=0;break; }} return 0; }

在寫代碼的過程中出現(xiàn)的問題是:

  • 二分查找的時候沒有做尾遞歸處理,導(dǎo)致返回值出現(xiàn)問題, 不能正確的返回出是否查找到當前元素的位置, 處理find((lo+hi)/2+1,hi,t,target_value); 寫成做 (lo+hi)/2; 導(dǎo)致在遞歸查找的過程中出現(xiàn)死遞歸, 不能返回出來
  • 在remove中將局部變量的名稱與全局變量的名稱寫成一樣的(size), 導(dǎo)致size–出錯; 真是愚蠢
  • 進行代碼調(diào)試的時候只是從邏輯的角度分析問題, 而沒有寫printf語句觀察程序的運行過程, 細心考慮每個變量的變化情況, 造成無法準確地定位錯誤的位置

總結(jié)

以上是生活随笔為你收集整理的顺序表的应用__电话本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 美女午夜激情 | 亚洲一区二区三区四区五区六区 | 少妇毛片视频 | 两根大肉大捧一进一出好爽视频 | 日p免费视频 | 亚洲va视频 | 亚洲不卡中文字幕 | 亚洲免费不卡视频 | 偷拍视频一区 | 国产精品夜夜躁视频 | 在哪里可以看黄色片 | 在线日本视频 | 亚洲AV无码精品国产 | 欧美激情性生活 | 怡红院av亚洲一区二区三区h | 法国空姐电影在线 | 在线免费观看黄网 | 色亚洲视频 | 美味的客房沙龙服务 | 2一3sex性hd | 久久综合九九 | 亚洲一区免费 | 99久久久无码国产精品6 | 久久2019| 一区二区三区视频在线播放 | 黄色网址你懂得 | 强行糟蹋人妻hd中文 | 天堂中文在线播放 | 午夜精品久久久久久99热 | 黄色男同视频 | 久久精品7 | 亚洲免费区| 黄色免费小视频 | 黄网在线 | 成年人免费在线视频 | 无码人妻久久一区二区三区蜜桃 | 婷婷在线免费观看 | 啄木乌欧美一区二区三区 | 婷婷777| 免费av网站在线看 | 初音未来打屁股 | 久久伊人婷婷 | 成人福利小视频 | 中文在线字幕免费观 | 黄色一级在线视频 | 国产资源精品 | 女人性高潮视频 | 在线视频日韩精品 | 国产又爽又黄的激情精品视频 | 五月天丁香网 | 韩国美女一区 | 青青草手机视频在线观看 | 伊人久久大香线蕉av一区 | 激情丁香| 亚洲乱色熟女一区二区 | 国产睡熟迷奷系列精品视频 | 污污的网站在线免费观看 | 午夜性色福利影院 | 和黑帮大佬的365 | 36d大奶| 成人h在线 | 91xxxxx| 免费污片网站 | 黄色三级在线播放 | 精品一区二区三区国产 | 中文字幕在线观看免费高清 | 麻豆久久久久久久 | 神马久久影院 | 香蕉视频免费在线播放 | 午夜激情福利视频 | 女人下面喷水视频 | 四虎成人影视 | 欧洲在线观看 | 亚洲女女做受ⅹxx高潮 | 亚洲综合婷婷 | 国产私拍 | 岛国免费视频 | 三级免费黄 | xxxxx亚洲 | 91视频xxx | 国产精品久久久久高潮 | 日韩精品在线不卡 | 黄色一级视频免费看 | 午夜视频免费在线观看 | 久久免费影院 | 三级免费观看 | 日本阿v视频 | 性色浪潮av| 丨国产丨调教丨91丨 | 亚洲AV成人无码精品久久盆瓶 | 亚洲免费av网 | 美女网站免费视频 | 成年网站在线 | 青春草免费视频 | 精品日韩av | 在线播放91灌醉迷j高跟美女 | 日韩欧美在线观看视频 | 婷婷在线视频观看 | 国产欧美在线观看视频 |