C语言实验2.docx
- 文档编号:12528080
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:14
- 大小:384.65KB
C语言实验2.docx
《C语言实验2.docx》由会员分享,可在线阅读,更多相关《C语言实验2.docx(14页珍藏版)》请在冰点文库上搜索。
C语言实验2
实验2:
输入一组整型元素序列,建立一个单链表,
实现该单链表的遍历;在该单链表中查找某一元素,查找成功返回1,否则返回0;
在该单链表中插入和删除某个元素。
#include
#include
#defineOVERFLOW-2
#defineOK1
#defineERROR0
#defineNULL0
typedefintElemType;
typedefintStatus;
//单链表存储结构
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
LinkListp;
//初始化一个空的单链表
StatusInitLinkList(LinkList&L){
L=(LinkList)malloc(sizeof(LNode));
if(!
L)exit(OVERFLOW);
L->next=NULL;
returnOK;
}
/*
下面是两中创建单链表的方法,
此程序使用的是第二种....
选择哪种,自己可以体验下
*/
//创建单链表,这种方法创建时把添加的数据插入到表头
voidCreateLinkList(LinkList&L)
{
intx;
printf("为单链表添加数据,输入0退出:
\n");
scanf("%d",&x);
while(x){
p=(LinkList)malloc(sizeof(LNode));
p->data=x;p->next=L->next;L->next=p;//x非零时,生成一个结点并插入到表头。
scanf("%d",&x);
}
}
//创建单链表,这种方法创建时把添加的数据插入到表尾
voidCreateLinkList_2(LinkList&L)
{
LinkListp,r;
intx;
r=L;
printf("为单链表添加数据,输入0退出:
\n");
scanf("%d",&x);
while(x){
p=(LinkList)malloc(sizeof(LNode));
p->data=x;p->next=NULL;
r->next=p;r=p;//x非零时,生成一个结点并插入到表尾。
scanf("%d",&x);
}
}
//遍历单链表
voidPrintLinkList(LinkListL)
{
p=L->next;
printf("单链表中数据如下:
\n");
while(p)
{
printf("%4d",p->data);//通过链表的遍历来输出链表中的信息
p=p->next;
}
printf("\n");
}
//计算单链表长度,并返回长度
StatusListLength(LinkListL)
{
intlength=0;
p=L->next;
while(p!
=NULL){
p=p->next;
length++;
}
returnlength;
}
//查找位置为i的数值
voidGetElem_L(LinkListL,inti)
{
intj=0;
p=L;
printf("请输入你要查找数据的位置:
");
scanf("%d",&i);
while((p->next!
=NULL)&&(j
p=p->next;
j++;
}
if(i==j)
printf("你查找的数据为:
%5d\n",p->data);
else
printf("没有你所要查找的数据\n");
}
//查找某一元素的位置并输出
voidLocateElem_L(LinkListL,intx)
{
p=L->next;
intcount=1;
intlength=0;
while(p!
=NULL){
if(p->data!
=x){
p=p->next;
count++;
}
else
break;
}
length=ListLength(L);
if(count<=length){
printf("你所查找数据的位置为:
%d\n",count);
}else{
printf("查找无效\n");
}
}
//删除某一位置的元素
voidListDelete(LinkListL,inti)
{
intj=1;
LinkLists;
p=L->next;
while(j p=p->next; j++; } s=p->next; p->next=s->next; free(s); PrintLinkList(L); } //删除指定数据 StatusListDelete_L(LinkListL,ElemTypex) { LinkListq; q=L; p=L->next; while(p&&p->data! =x)/*查找元素值为x的结点的位置,p指向它*/ { q=p; p=p->next; } if(p)/*找到了元素值为x的结点*/ { q->next=p->next;/*删除结点p*/ free(p);/*释放被删除元素的空间*/ returnOK;/*成功删除元素值为x的结点,返回1*/ } else returnERROR;/*单链表中不存在元素值为x的结点,返回0*/ } //在单链表中插入数据 StatusListInsert(LinkListL,inti,ElemTypee) { LinkLists; intj; p=L;j=0; while(p&&j { p=p->next;j++; } if(! p||j>i-1)returnERROR;//插入位置i不合法 s=(LinkList)malloc(sizeof(LNode));//为插入元素分配存储空间 s->data=e; s->next=p->next;//插入到p结点的后面 p->next=s; returnOK; } //主方法 voidmain(){ intmenu;//菜单输入数值 inti,j;//查找数据的位置i,输入的数值j LinkListL; 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("0.退出\n"); printf("\n"); printf("***********Author: ZMH************\n"); printf("\n请输入所选菜单(0-7): "); printf("\n"); scanf("%d",&menu); if(menu<0||menu>8){ printf("输入无效\n"); }else{ switch(menu){ case1: InitLinkList(L);CreateLinkList_2(L);break; case2: PrintLinkList(L);break; case3: GetElem_L(L,j);break; case4: printf("请输入你要查找数据的值: "); scanf("%d",&j); LocateElem_L(L,j);break; case5: printf("请输入你要删除数据的位置"); scanf("%d",&i); ListDelete(L,i); break; case6: printf("请输入你要删除的数据的值: \n"); scanf("%d",&j); if(ListDelete_L(L,j)==1){ printf("删除成功! "); PrintLinkList(L); }else{ printf("删除失败! "); } break; case7: printf("请输入你要插入数据的位置: "); scanf("%d",&i); if(i>ListLength(L)){ printf("输入位置无效! "); break; }else{ printf("请输入你要插入的数据: "); scanf("%d",&j); ListInsert(L,i,j); PrintLinkList(L); } break; case0: exit(0); } } }while(menu); } 截图如下 1、输入1和数字建立单链表: 2、输入2遍历单链表 3、输入3查找指定元素 4、输入4查找指定元素位置 5、输入5删除指定位置节点 6、输入6值为**的指定节点(因为44已经删除不再存在所以这里删除失败) 7、输入7插入数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验