链表实验报告.docx
- 文档编号:14318627
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:17
- 大小:51.37KB
链表实验报告.docx
《链表实验报告.docx》由会员分享,可在线阅读,更多相关《链表实验报告.docx(17页珍藏版)》请在冰点文库上搜索。
链表实验报告
链表实验报告
————————————————————————————————作者:
————————————————————————————————日期:
《数据结构》实验报告二
系别:
嵌入式系统工程系
班级:
嵌入式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; ﻩ} } 四、运行输出结果: 五、调试和运行程序过程中产生的问题及采取的措施: 问题: 子函数和主函数前后的调用出现问题,指针的调用不是太明白。 措施: 根据编译器提示的错误逐个检查子函数前后的变量,以及寻求同学的帮助。 六、对算法的程序的讨论、分析,改进设想,其它经验教训: 看一段代码和亲自动手编写一套程序差别太大了,所以以后还要多亲手上机操作,还有对指针的调用方便还很欠缺,要多学习。 七、对实验方式、组织、设备、题目的意见和建议: 希望老师以后可以给我们多些自己动手实践的机会,可以在课堂上多让我们动手去上机操作,老师带领我们完成主要部分,或给一些提示指导。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告