链表实验报告.docx

上传人:b****3 文档编号:26753461 上传时间:2023-06-22 格式:DOCX 页数:17 大小:51.37KB
下载 相关 举报
链表实验报告.docx_第1页
第1页 / 共17页
链表实验报告.docx_第2页
第2页 / 共17页
链表实验报告.docx_第3页
第3页 / 共17页
链表实验报告.docx_第4页
第4页 / 共17页
链表实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

链表实验报告.docx

《链表实验报告.docx》由会员分享,可在线阅读,更多相关《链表实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

链表实验报告.docx

链表实验报告

链表实验报告

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

《数据结构》实验报告二

系别:

嵌入式系统工程系   

班级:

嵌入式11003班     

学号:

11160400314     

姓名:

孙立阔       

日期:

2012年4月9日         

指导教师:

申华     

一、上机实验的问题和要求:

单链表的查找、插入与删除。

设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。

具体实现要求:

1.从键盘输入10个字符,产生不带表头的单链表,并输入结点值。

2.从键盘输入1个字符,在单链表中查找该结点的位置。

若找到,则显示“找到了”;否则,则显示“找不到”。

3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。

4.从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。

5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。

6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。

7.(★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。

二、程序设计的基本思想,原理和算法描述:

(包括程序的结构,数据结构,输入/输出设计,符号名说明等)

 创建一个空的单链表,实现对单链表的查找,插入,删除的功能。

 

三、源程序及注释:

#defineOK   1

#define ERROR   0

#defineINFEASIBLE -1

#defineOVERFLOW  -2

#defineTRUE  1

#define FALSE0

#defineList_Init_Size 10

#define ListIncrement2

typedefchar ET;

typedefET*  Ep;

typedefint Status;

typedef structLNode{

ﻩ ET data;

  structLNode*next;

 }LNode,*LinkList;

/*LinkList La,Lb,Lc;*/ﻺ

#include "stdio.h"

#include "alloc.h"

/*Displaythe linklist'selements.*/

voidprintlk(LinkList L){

  LinkListp;

p=L->next;

while(p) {

 printf("%c->",p->data);

 p=p->next;

 }

 printf("NULL\n");

}

/*Creatlinklist from headnode.*/

void CreatList( LinkList*L,intn){

inti;

 LinkListp,q;

 ETstr[20],c;

p=(LinkList)malloc(sizeof(LNode));

p->next=NULL;

*L=q=p;

 printf("Pleaseinput thedata :

");

for (i=n;i>0;i--){

  p=(LinkList)malloc(sizeof(LNode));

c=getche();  /*scanf("%c",&c);*/

printf("\n\n");

 p->data=c;

   p->next=q->next;

 q->next=p;

  }

/*Initthe linklist.*/

voidInit(LinkList*L){

 int n;

  printf("Pleaseinputthenumber ofthenode:

");

scanf("%d",&n);

 CreatList(L,n);

}

/*GetthevalueofelementI;*/

intGetElem(LinkListL,inti,ET*e){

intj=1;

 LinkListp;

p=L->next;

while(p&&j

p=p->next;

   ++j;

  }

if(!

p||j>i)returnTRUE;

 *e=p->data;

 returnFALSE;

}

/*Inserta element afterI */

intListInsert(LinkList*L,inti,ETe){

/*Addyourowncodes. */

}

/*Delete theelementI */

intListDelete(LinkList*L,int i,ET *e)

{

/*Addyourowncodes.*/

}

intInsert(LinkList*L) {

inti,flag;

  ETdata;

 printf("Pleaseinputthe position:

");

scanf("%d",&i);

printf("Pleaseinputthedata:

");

data= getche(); /*scanf("%c",&data);*/

flag=ListInsert(L,i,data);

  returnflag;

}

StatusDelete(LinkList *L){

inti,flag;

 ETe;

 printf("Pleaseinput thenumber :

 ");

scanf("%d",&i);

 flag=ListDelete(L,i,&e);

 printf("Deleted elementis%c\n",e);

 return flag;

}

/*Findtheelement's position.*/

int LocateElem(LinkListL,ET e){

  inti=0;

 LinkListp;

p=L->next;

  while(p){

 i++;

 if (p->data==e) return i;

 }

return0;

/*Addthe LbaftertheLa.*/

voidUnion(LinkList*La,LinkList *Lb){

LinkListpa,pb;

 /* Addyourowncodes.*/

}

/*Mergetwo sequenceintoone,don'tchangeany elementsin

these twolinklists.Jointwo sequenceto one.  */

voidMergeList(LinkList *L1,LinkList*L2,LinkList*L3){

LinkList pa,pb,pc;

/*Add yourown codes.*/

}

/*ListtheMenu*/

void MenuList() {

 printf("\n\n\n==========================\n");

 printf("1*******InsertLA\n");

printf(" 2  *******InsertLB\n");

printf(" 3 *******Delete LA\n");

printf("4******* DeleteLB\n");

printf("5*******UnionLAand LB\n");

 printf(" 6******* Merge LAandLBtoLC\n");

printf("7 ******* printLinkList\n");

 printf("8 *******Exit\n");

printf("==========================\n");

}

/*Selectthemenu */

voidMenuSelect(LinkList*La,LinkList*Lb){

 intselect,done=1;

LinkListLc;

 while(done){

 MenuList( );

   printf("inputtheoperatingcode:

");

 scanf("%d",&select);

 switch(select){

case 1:

 Insert(La);break;

ﻩcase2:

Insert(Lb);break;

ﻩcase 3:

Delete(La);break;

ﻩcase4:

Delete(Lb);break;

ﻩcase 5:

Union(La,Lb);break;

ﻩcase6:

MergeList(La,Lb,&Lc);

ﻩﻩprintf("LC:

  ");printlk(Lc);

ﻩbreak;

 case7:

printf("LA:

");printlk(*La);

ﻩprintf("LB:

");printlk(*Lb);

break;

case8:

done=0;break;

ﻩ default:

printf(" ERROR\n");

  }

}

main(){

 LinkListLa,Lb;

 printf("LA  ");

 Init(&La);

 printlk(La);

 printf("LB   ");

Init(&Lb);

 printlk(Lb);

 MenuSelect(&La,&Lb);

调试后的代码:

#include<stdio.h>

#include<malloc.h>

typedefintDataType;

typedef structLinkList

{

 intdata;

  structLinkList *next;

}LinkList;

voidPrintList(LinkList*h);

LinkList*InitList();

voidInsList(LinkList*h,int i,DataType x);

voidLocList(LinkList*h,inti);

voidDelList(LinkList *h,int i);

 

voidmain()

{

inti,n,x;

LinkList*h;

ﻩh=InitList();

PrintList(h);

printf("\n===========\n");

printf("0------EXIT\n");

ﻩprintf("1------INSERT\n");

ﻩprintf("2------DELERT\n");

ﻩprintf("3------LOCERT\n");

printf("\n===========\n\n\n");

ﻩwhile

(1)

ﻩ{

ﻩprintf("\nSelect\n");

ﻩscanf("%d",&n);

switch(n)

ﻩ{

ﻩcase0:

ﻩﻩﻩexit(0);

ﻩbreak;

ﻩﻩcase1:

ﻩprintf("pleaseinputtheposition:

\n");

ﻩscanf("%d",&n);

ﻩﻩﻩprintf("pleaseinputthedata:

\n");

ﻩscanf("%d",&x);

InsList(h,n,x);

ﻩPrintList(h);

break;

ﻩcase2:

printf("pleaseinputyouwanttodelete position:

\n");

ﻩﻩﻩscanf("%d",&i);

ﻩﻩDelList(h,i);

ﻩﻩPrintList(h);

ﻩbreak;

ﻩcase3:

ﻩﻩprintf("pleaseinputyouwanttosearchposition:

\n");

ﻩscanf("%d",&i);

ﻩﻩLocList(h,i);

ﻩPrintList(h);

ﻩﻩbreak;

default:

ﻩprintf("error\n");

ﻩbreak;

ﻩ}

}

}

 

LinkList*InitList()

{

ﻩLinkList*h,*s,*r;

ﻩint a,c,i;

ﻩh=(LinkList*)malloc(sizeof(LinkList));  

ﻩ h->next=NULL;

 r=h;

ﻩprintf("pleaseinputsomelink'slength:

");

ﻩ scanf("%d",&c);

ﻩfor(i=0;i

{  

scanf("%d",&a);

ﻩs=(LinkList*)malloc(sizeof(LinkList));

ﻩs->data=a;

ﻩﻩs->next=r->next;

ﻩ r->next=s;

ﻩﻩr=r->next;

ﻩreturnh;

 

voidInsList(LinkList*h,inti,DataType x)

{

LinkList*s,*p;

ﻩint j=1;

ﻩp=h;

s=(LinkList*)malloc(sizeof(LinkList));

ﻩfor(j=1;j

=NULL;j++)

p=p->next;

ﻩif(p==NULL)

printf("error!

\n");

ﻩelse

{

ﻩs->data=x;

ﻩs->next=p->next;

p->next=s;ﻩﻩ

}

}

voidDelList(LinkList *h,inti)

{

LinkList*p,*q;

ﻩintj=1;

p=h->next;

ﻩq=p->next;

 while(j!

=i-1 &&q!

=NULL)

ﻩ{

ﻩp=p->next;

ﻩq=q->next;

ﻩﻩj++;

ﻩ}

if(q==NULL)

printf("error!

\n");

else

ﻩ{

p->next=q->next;

ﻩﻩfree(q);

}

 

voidLocList(LinkList*h,inti)

{

LinkList*p;

int j=1;

p=h->next;

ﻩwhile(p!

=NULL)

{

ﻩif(p->data==i)

ﻩ{

 ﻩprintf("position is%d\n",j);

ﻩbreak;

ﻩ}

ﻩp=p->next;

ﻩﻩj++;

}

if(p==NULL)

ﻩprintf("NOthisdatain thelink\n");

}

void PrintList(LinkList*h)

{

LinkList*p;

p=h->next;

ﻩwhile(p!

=NULL)

ﻩ{

ﻩprintf("%d ->",p->data);

p=p->next;

ﻩ}

}

四、运行输出结果:

 

五、调试和运行程序过程中产生的问题及采取的措施:

问题:

子函数和主函数前后的调用出现问题,指针的调用不是太明白。

措施:

根据编译器提示的错误逐个检查子函数前后的变量,以及寻求同学的帮助。

 

六、对算法的程序的讨论、分析,改进设想,其它经验教训:

看一段代码和亲自动手编写一套程序差别太大了,所以以后还要多亲手上机操作,还有对指针的调用方便还很欠缺,要多学习。

 

七、对实验方式、组织、设备、题目的意见和建议:

希望老师以后可以给我们多些自己动手实践的机会,可以在课堂上多让我们动手去上机操作,老师带领我们完成主要部分,或给一些提示指导。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1