
如何用C语言做到增删改查 内详
2019-03-12 17:01:43
微信公开课小程序热门讨论「如何用C语言做到增删改查 内详」最新回复-很早前帮朋友写的,跟你的需求很像,给你用吧。你可改下main函数,使它更贴近你的需求。如果你不会改,再帮你改吧。#includetime.h#includestdio.h#defineNULL2#defineERROR1#defineOK1#defineTRUE2#defineFALSE3#defineBoolenint#defineStatusint#defineLIST_INIT_SIZE3#defineLIST_INCREMENT2#defineNAME_LEN13#defineDES_LEN30charErrDescription[DES_LEN];typedefstruct{intNO;charName[NAME_LEN];enum{male,female}Sex;intAge;charTel[15];charInserttime[64];}ElemType,*ElemPointer;typedefstruct{ElemPointerbase;//基址intlength;//表长intlistsize;//内存占用intelemcount;//记录数}SqList,*SqPointer;intErrorEXP(inti){switch(i){case1:strcpy(ErrDescription,InitList::(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType))空间申请失败);break;case2:strcpy(ErrDescription,IncreaseList::(ElemType*)realloc(Lbase,(Llength+LIST_INCREMENT)*sizeof(ElemType))空间申请失败);break;case3:strcpy(ErrDescription,if(!Lbase)returnError;SqList不存在);break;case4:strcpy(ErrDescription,GetElem::i越界);break;case5:strcpy(ErrDescription,ListInsert::i越界);break;case6:strcpy(ErrDescription,ListInsert::CALLIncreaseList(L)==ERRORreturnError邻接空间申请失败,由ListInsert返回);break;case7:strcpy(ErrDescription,ListDelete::i越界);break;case8:strcpy(ErrDescription,KeyInList::i越界);break;case9:strcpy(ErrDescription,KeyInList::CALLListInsert(L,i,temp)==ERRORreturnError邻接空间申请失败,由KeyInList返回);break;case10:strcpy(ErrDescription,ScanfList::CALLKeyInList(L,i++)==ERRORreturnError);break;}puts(!!!!!!!!!!!!!!!ERROR!!!!!!!!!!!!!!!\n);puts(ErrDescription);puts(\n!!!!!!!!!!!!!!!ERROR!!!!!!!!!!!!!!!\n);returnERROR;}StatusInitList(SqPointerL){Lbase=0;//不可不要!!!去掉后即使(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType))失败,系统也会认为正常Lbase=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!Lbase)returnErrorEXP(1);//空间申请失败,返回Llength=LIST_INIT_SIZE;Llistsize=Llength*sizeof(ElemType);Lelemcount=0;returnOK;}StatusIncreaseList(SqPointerL){ElemPointernewbase;newbase=(ElemType*)realloc(Lbase,(Llength+LIST_INCREMENT)*sizeof(ElemType));if(!newbase)returnErrorEXP(2);Lbase=newbase;Llength+=LIST_INCREMENT;Llistsize=Llength*sizeof(ElemType);returnOK;}StatusDestroyList(SqPointerL){if(!Lbase)returnErrorEXP(3);//L不存在,返回free(Lbase);Llength=NULL;Llistsize=NULL;Lelemcount=NULL;returnOK;}StatusClearList(SqPointerL){if(!Lbase)returnErrorEXP(3);//L不存在,返回Lelemcount=0;returnOK;}BoolenListEmpty(SqPointerL){if(!Lbase)returnErrorEXP(3);//L不存在,返回if(Lelemcount==0)returnTRUE;elsereturnFALSE;}intListElemCount(SqPointerL){if(!Lbase)returnErrorEXP(3);//L不存在,返回returnLelemcount;}StatusGetElem(SqPointerL,inti,ElemType*ret)//调用此函数需将ret指向main函数域某一ElemType变量{if(!Lbase)returnErrorEXP(3);//L不存在,返回if(iLelemcount)returnErrorEXP(4);//i越界,返回*ret=Lbase[i1];//i从1开始此种方法在main中改变*ret会直接更改链表中数据returnOK;}//重大发现指针型tempbase普通型L.baseintLocateElem(SqPointerL,charLocatename[])//返回的i从1开始{inti=0;ElemType*temp;if(!Lbase)returnErrorEXP(3);//L不存在,返回while(iLelemcount){temp=&(Lbase[i]);//改为temp=Lbase[i++];并去除下面的i++;??if(strcmp(tempName,Locatename)==0)returni+1;//不能用tempName==locatename来试图比较字符串i++;}return0;}StatusListInsert(SqPointerL,inti,ElemTypenewelem)//插入位置1=i=elemcount+1{ElemPointernewbase;ElemType*temp,*flag;if(!Lbase)returnErrorEXP(3);//L不存在,返回if(i1||iLelemcount+1)returnErrorEXP(5);if(Lelemcount==Llength)if(IncreaseList(L)==ERROR)returnErrorEXP(6);flag=&(Lbase[i1]);//插入位置for(temp=&(Lbase[Lelemcount1]);temp=flag;temp)*(temp+1)=*temp;*flag=newelem;Lelemcount++;returnOK;}StatusListDelete(SqPointerL,inti,ElemType*ret)//调用此函数需将ret指向main函数域某一ElemType变量{ElemType*temp;if(!Lbase)returnErrorEXP(3);//L不存在,返回if(i1||iLelemcount)returnErrorEXP(7);*ret=Lbase[i1];//删除位置,这里先返回该值for(temp=&(Lbase[i]);temp=&(Lbase[Lelemcount1]);temp++)*(temp1)=*temp;Lelemcount;returnOK;}StatusKeyInList(SqPointerL,inti){ElemTypetemp;time_tt;chartmp[64];charS;if(!Lbase)returnErrorEXP(3);//L不存在,返回if(i1||iLelemcount+1)returnErrorEXP(8);printf(正在输入第%d个元素的值:,i);printf(\n编号:(int)\n);scanf(%d,&temp.NO);printf(\n姓名:(char*)\n);scanf(%s,&temp.Name);printf(\n性别:(morf)\n);do{S=getch();if(S==m)temp.Sex=male;elseif(S==f)temp.Sex=female;elseputs(Keyinmorf.\n);}while(S!=m&&S!=f);putchar(S);printf(\n年龄:(int)\n);scanf(%d,&temp.Age);printf(\n电话:(char*)\n);scanf(%s,&temp.Tel);printf(\n记录时间:\n);t=time(0);strftime(tmp,sizeof(tmp),%Y/%m/%d%X%A本年第%j天%z,localtime(&t));puts(tmp);strcpy(temp.Inserttime,tmp);if(ListInsert(L,i,temp)==OK)returnOK;elsereturnErrorEXP(9);}ElemTypeScanfElem(){ElemTypetemp;time_tt;chartmp[64];charS;printf(正在录入元素:);printf(\n编号:(int)\n);scanf(%d,&temp.NO);printf(\n姓名:(char*)\n);scanf(%s,&temp.Name);printf(\n性别:(morf)\n);do{S=getch();if(S==m)temp.Sex=male;elseif(S==f)temp.Sex=female;elseputs(Keyinmorf.\n);}while(S!=m&&S!=f);putchar(S);printf(\n年龄:(int)\n);scanf(%d,&temp.Age);printf(\n电话:(char*)\n);scanf(%s,&temp.Tel);printf(\n记录时间:\n);t=time(0);strftime(tmp,sizeof(tmp),%Y/%m/%d%X%A本年第%j天%z,localtime(&t));puts(tmp);strcpy(temp.Inserttime,tmp);returntemp;}StatusScanfList(SqPointerL,inti){charp=c;while(putchar(\n),p==c||p==C){p=\0;if(KeyInList(L,i++)==ERROR)returnErrorEXP(10);printf(\nPressESCkeytoexitorCtocontinue...);while(p!=c&&p!=C&&(int)p!=27)p=getch();}returnOK;}StatusPrintListProperty(SqPointerL){puts(SqListLProperty:);if(!Lbase){puts(链表不存在!);returnOK;}elseputs(链表已初始化...\n);printf(%d/%dBASE=%d,MemoryStatus=%d\n,Lelemcount,Llength,Lbase,Llistsize);returnOK;}StatusPrintOnScreen(SqPointerL){inti;charStmp[7],t;if(!Lbase)returnErrorEXP(3);//L不存在,返回puts(PushCshellCLSorotherkeytoskip.);t=getch();if(t==c||t==C)system(cls);puts(数据表打印:);for(i=0;i=Lelemcount1;i++){printf(\nElem%dst:\n,i+1);if(Lbase[i].Sex==male)strcpy(Stmp,male);elseif(Lbase[i].Sex==female)strcpy(Stmp,female);elsestrcpy(Stmp,Unknow);printf(NO:%d\tName:%s\t\tSex:%s\tAge:%d\n\tTel:%s\n\tInsertTime:%s\n,Lbase[i].NO,Lbase[i].Name,Stmp,Lbase[i].Age,Lbase[i].Tel,Lbase[i].Inserttime);}returnOK;}StatusPrintElem(ElemPointerelem){charStmp[7];printf(\nPrintElem:\n);if(elemSex==male)strcpy(Stmp,male);elseif(elemSex==female)strcpy(Stmp,female);elsestrcpy(Stmp,Unknow);printf(NO:%d\tName:%s\t\tSex:%s\tAge:%d\n\tTel:%s\n\tInsertTime:%s\n,elemNO,elemName,Stmp,elemAge,elemTel,elemInserttime);returnOK;}voidmain()//把以上所有函数都串了起来{SqListTheList;SqPointerListP;ElemTypemylistelem,*elemtemp;ElemPointermylist;inti;charnameT[20];elemtemp=&mylistelem;//*retListP=&TheList;if(InitList(ListP)==OK)puts(InitList(TheList)==OK);PrintListProperty(ListP);if(ListEmpty(ListP)==TRUE)puts(ListEmpty==True);elseputs(ListEmpty==False);ScanfList(ListP,1);PrintListProperty(ListP);PrintOnScreen(ListP);printf(ListElemCountreturn%d.,ListElemCount(ListP));puts(\nGetElemindex?);scanf(%d,&i);if(GetElem(ListP,i,elemtemp)==OK)PrintElem(elemtemp);puts(\nLocateElemname?);scanf(%s,nameT);printf(LocateElemreturn%d.,LocateElem(ListP,nameT));puts(\nListDeleteindex?);scanf(%d,&i);if(ListDelete(ListP,i,elemtemp)==OK)PrintElem(elemtemp);puts(\nListInsertindex?);scanf(%d,&i);puts(\nListInsertNEWELEM?);ListInsert(ListP,i,ScanfElem());PrintListProperty(ListP);PrintOnScreen(ListP);if(ClearList(ListP)==OK)puts(ClearList==OK);if(ListEmpty(ListP)==TRUE)puts(ListEmpty==True);if(DestroyList(ListP)==OK)puts(DestroyList==OK);getch();}/*函数列表类型名称参数说明intErrorEXP(inti)错误描述符StatusInitList(SqPointerL)初始化SqPointerL...通过L返回baseStatusIncreaseList(SqPointerL)L当前满时,继续申请空间StatusDestroyList(SqPointerL)销毁LStatusClearList(SqPointerL)把L置为空表BoolenListEmpty(SqPointerL)判断L是否为空表,是则返回TRUEintListElemCount(SqPointerL)返回当前L中记录的元素个数StatusGetElem(SqPointerL,inti,ElemType*ret)通过*ret返回i号元素intLocateElem(SqPointerL,charLocatename[])顺序查找表,根据name字段,返回首个匹配元素的i,无则返回0StatusListInsert(SqPointerL,inti,ElemTypenewelem)在L中的i号位置插入newelem元素StatusListDelete(SqPointerL,inti,ElemType*ret)删除L中第i号元素,并用*ret返回该元素StatusKeyInList(SqPointerL,inti)从键盘输入单个元素并插入到i号位置ElemTypeScanfElem()从键盘输入单个元素返回一个ElemType类型的节点StatusScanfList(SqPointerL,inti)从i号开始递增顺序录入元素到L,直到按ESCStatusPrintListProperty(SqPointerL)打印L的属性,打印格式为(已用空间/已申请空间基址内存占用)StatusPrintOnScreen(SqPointerL)打印整张L表到屏幕StatusPrintElem(ElemPointerelem)打印单个ElemType类型的元素时间仓促,所以乱了些,书上2章开头动态线性的顺序表的基本操作几乎都写了不知你说的是不是这个,mian函数比较乱,只是把所有的基本操作都串了起来,你可以根据情况改改主函数的调用过程,就会比较清楚是怎么实现的了。你可以按F10进行单部跟踪,F11可以进入调用过程,一步一步跟着程序走一遍就好了。关于动态链表的我之前写过一个,也好象给你看过,这里再附上一起发过去。文件LinkList.c只实现了构造链表,并打印出来的功能。*/
Justpassby. 更多有关「如何用C语言做到增删改查 内详」的疑问请扫码关注微信公开课+小程序!
Justpassby. 更多有关「如何用C语言做到增删改查 内详」的疑问请扫码关注微信公开课+小程序!
标签:微信公开课,小程序

「如何用C语言做到增删改查 内详」热议话题订阅
方法1:微信扫描微信公开课小程序码即可订阅热议话题「如何用C语言做到增删改查 内详」
方法2:微信搜索微信公开课小程序名称进入,即可订阅热议话题「如何用C语言做到增删改查 内详」
方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热议话题「如何用C语言做到增删改查 内详」
微信公开课小程序热议话题「如何用C语言做到增删改查 内详」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。
微信公开课热议话题「如何用C语言做到增删改查 内详」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。
微信公开课小程序
更新时间:2019-03-12 17:01:43
>
__methodCallerx27;ofundefined
>-404011cloudfunctionexecutionerror
>,请补充选择商家自营-预付卡销售-发行方类目,并在基础信息处申请该类目,通过
>:host在模拟器中显示无效
>:请在小程序服务页面上架正式(非测试)内容或商品后重新提交审核
>.net 微信小程序 上传图片
>'setTimeout'的问题
>‘三朵里熙SPA主题减压空间’为什么搜索关键词‘三朵里‘搜不到
>‘扫普通链接二维码打开小程序‘中设置为体验版,扫码打开是线上版本
>“cloudfunctions**indexjs”gitignore
>“NO ULINK DEVICE FOUND”是怎么回事
>“万马掌上校园”的类目审核
>“上线了”公司开发的微信小程序怎么样?
>“产品是否一定需要条形码”
>