C语言实验1.docx
- 文档编号:8420712
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:12
- 大小:434.66KB
C语言实验1.docx
《C语言实验1.docx》由会员分享,可在线阅读,更多相关《C语言实验1.docx(12页珍藏版)》请在冰豆网上搜索。
C语言实验1
实验1:
输入一组整型元素序列,建立顺序表,
实现该顺序表的遍历;在该顺序表中查找某一元素,
查找成功返回1,否则返回0;在该顺序表中插入和删除某个元素。
//头文件声明
#include
#include
//宏定义
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineOVERFLOW-2
#defineLIST_INIT_SIZE100//线性表存储空间的初始分配量
#defineLISTINCREMENT10//线性表存储空间的分配增量
typedefintStatus;
typedefintElemType;
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}SqList;
StatusListInsert_Sq(SqList&L,inti,ElemTypee);
//构造一个空的顺序表
StatusInitList_Sq(SqList&L){
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
returnOK;
}
//建立一个顺序表,含有n个数据元素。
voidCreateList_Sq(SqList&L){
inti=1,x;
printf("请输入线性表元素的值(输入0结束):
\n");
scanf("%d",&x);
while(x)
{
ListInsert_Sq(L,i,x);
i++;
scanf("%d",&x);
}
}
//输出顺序表及顺序表的长度
voidPrintList_Sq(SqListL){
inti;
printf("线性表长度为:
%d\n",L.length);
printf("顺序表元素为:
\n");
for(i=0;i printf("%4d",L.elem[i]); printf("\n"); } //在顺序表给定的位置i,插入一个值为x的结点 StatusListInsert_Sq(SqList&L,inti,ElemTypee){ ElemType*newbase,*p,*q; if(i<1||i>L.length+1)returnERROR; if(L.length>=L.listsize){ newbase=(ElemType*)realloc(L.elem, (LIST_INIT_SIZE+LISTINCREMENT)*sizeof(ElemType)); if(! newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]);p>=q;p--) *(p+1)=*p; *q=e; L.length++; returnOK; } //在顺序表中删除给定位置i的结点。 StatusListDelete_Sq(SqList&L,inti,ElemType&e){ ElemType*p,*q; if((i<1)||(i>L.length))returnERROR; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)*(p-1)=*p; L.length--; returnOK; } //删除值为x的结点 StatusListDeletex_Sq(SqList&L,ElemTypex){ inti; ElemType*p,*q; i=0;p=L.elem; while((i =x))p++; if(i==L.length)returnERROR; else{ q=L.elem+L.length-1; for(++p;p<=q;p++)*(p-1)=*p; L.length--; returnOK; } } //根据位置获得顺序表中数据 ElemTypeGetElem(SqList*L,inti){ ElemType*e; if(! L->elem||i>L->length||i<1) exit(ERROR); e=&L->elem[i-1]; return*e; } //根据数值查找元素 StatusLocateElem(SqList*L,ElemTypee){ inti; if(! L->elem)exit(ERROR); for(i=0;i<=L->length-1;i++){ if(e==L->elem[i]) returni+1; } return0; } //主函数 voidmain(){ SqListL; intmenu;//menu为菜单中的选项值 inti,x;//i插入数据的位置,x插入数据的值 intloc;//查找位置 intflag;//判断标志 do{ printf("\n"); printf("\n"); printf("\n"); printf("************实验一***************\n"); printf("\n"); printf("1.建立一个顺序表\n"); printf("2.遍历新建立的顺序表\n"); printf("3.查找顺序表中的元素\n"); printf("4.在顺序表中插入一个值\n"); printf("5.删除顺序表中指定位置的节点\n"); printf("6.删除值为**的节点\n"); printf("7.根据位置进行查找\n"); printf("8.根据数值进行查找\n"); printf("0.退出\n"); printf("\n请输入所选菜单(0-5): \n"); printf("\n"); printf("***********Author: ZMH************\n"); scanf("%d",&menu); if(menu<0||menu>9){ printf("输入无效\n"); }else{ switch(menu){ case1: InitList_Sq(L); CreateList_Sq(L); break; case2: PrintList_Sq(L);break; case3: printf("3.查找顺序表中的元素\n");break; case4: { printf("请输入插入元素的位置i和插入元素值x: (1<=i<%d)",L.length+1); scanf("%d%d",&i,&x); flag=ListInsert_Sq(L,i,x); if(flag==0) printf("插入失败! \n"); else{ printf("插入成功! \n"); PrintList_Sq(L); } break; } case5: printf("请输入要删除的位置: "); scanf("%d",&i); flag=ListDelete_Sq(L,i,x); if(flag==0) printf("删除失败! \n"); else{ printf("删除成功! \n"); PrintList_Sq(L); } break; case6: printf("请输入要删除的元素: "); scanf("%d",&x); flag=ListDeletex_Sq(L,x); if(flag==0) printf("删除失败! \n"); else{ printf("删除成功! \n"); PrintList_Sq(L); };break; case7: printf("请输入你要查找的位置: \n"); scanf("%d",&loc); while(loc>L.length||loc<1){ printf("位置输入错误请重新输入\n"); scanf("%d",&loc); } printf("第%d个元素是: %d\n",loc,GetElem(&L,loc)); break; case8: printf("输入查找的元素的值: "); scanf("%d",&x); if(! LocateElem(&L,x)) printf("该顺序表中没有%d这个元素.\n",x); else printf("%d在顺序表中是第%d个元素\n",x,LocateElem(&L,x)); break; case0: exit(0); } } }while(menu); } 下面为截图: 1、输入1 2、输入0 3、输入2 4、输入3 5、输入4 6、输入5 7、输入6 8、输入7 9、输入8 10、输入0后退出程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)