当前位置:文档之家› 单链表基本操作

单链表基本操作

2)调试方法通常有二种:总体调试、分块调试。你主要采用哪种调试方法?
总体调试:把算法组装成单个程序,按C程序结构标准分层检查调试;
分块调试:把算法分拆成几个功能模块,按C程序结构标准分模块调试;
3)错误跟踪有两种方法:错误信息排查法、执行路线跟踪法。
错误信息排查法:根据错误信息进行分类排查,要求分析者对C的错误代码要有足够的了解和认识,有经验的程序员多用此法。
*****学院计算机科学与技术系
实验报告
实验名称单链表基本操作
专业班级姓名学号
指导教师成绩日期2011-11-4
一、实验目的
熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的插入、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。
二、实验内容
建立单链表,并实现单链表的插入、删除、查找运算。
LinkList p;
for(p=L->next;p!=NULL;p=p->next){
printf("%d",p->data);
printf("->");
printf("\t");
}
}
void main(){
printf("\n");
printf("\n");
printf("\n");
printf("---------★------------------------***学院----------------------★---------\n");
要求:要有良好的人机界面,具备插入、删除、显示以及查找的功能。
三、实验要求
1.在问题分析的基础上选择合适的存储结构,进行算法设计,编制程序并上机调试成功。
2.按要求完成实验报告。
3.保存和打印出程序的运行结果,并结合程序进行分析。
四、实验步骤
1.需求分析
本演示程序用C语言编写,要有良好的人机界面,实现单链表的基本功能:插入、删除、显示以及查找。
printf("\n");
printf("尊敬的用户:您好!\n");
printf("\n");
printf("\n");
printf("欢迎使用\n");
int s,i,e,e1;
LinkList L;
printf("请输入你要建立的链表的大小:");
scanf("%d",&s);
L=CreateList_L(s);
2.概要设计
本程序包含7个函数:
①主函数main()
②显示操作菜单函数scan()
③构造单链表函数createlist_l()
④查找单链表函数locatelist_l()
⑤插入运算函数listinsert_l()
⑥删除运算函数listdelete_l()
⑦显示单链表函数printlist_l()
各函数间关系如下:
printf(" ===============制作人:***===========\n");
printf("\n");
printf(" ==============系统功能菜单==============\n");
printf(" =======友情提醒:查询前请刷新系统!======\n");
printf(" ========================================\n");
删除算法2.10
Status ListDelete_L(LinkList &L,int i,ElemType &e){
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
P=L;j=0;
While(p->next&&j<i-1){ //寻找第i个结点,并令p指向其前趋
P=p->next;++j;
printf(" |======================================|\n");
printf(" | 1.查询数据|\n");
printf(" |--------------------------------------|\n");
printf(" | 2.插入数据|\n");
p=L;
j=0;
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
printf("该数字不存在!");
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return L;
}
//单链表打印
void printList_L(LinkList L){
If (!p||j>i-1)return ERROR; //i小于1或大于表长+1
S=(LinkList)malloc(sizeof(LNode)); //生成新结点
s->data=e;s->next=p->next; //插入L中
p->next=s;
return OK;
}//ListInsert_L
break;
case 2 :
printf("请输入要插入数的位置:");
scanf("%d",&i);
printf("请输入要插入的数:");
scanf("%d",&e);
L=ListInsert_L(L,i,e);
printf("插入后的链表为:\n");
printList_L(L);
break;
}
return L;
}
//单链表的查找
int GetElem_L(LinkList L,int i,int &e){
LinkList p;
int j;
p=L->next;
j=1;
while(p&&j<i){
p=p->next;
++j;
}
if(!p||j>i)
printf("该数据不存在!");
e=p->data;
Typedef struct LNode{
ElemType data;
Struct LNode *next;
}LNode, *LinkList;
(2)单链表的基本操作算法
构造单链表算法:…
查找算法2.8
Status GetElem_L(LinkList L,int i,ElemType &e){
//L为带头结点的单链表的头指针。
linklist p;
printf("the data of L is:\n");
for(p=l->next;p!=NULL;p=p->next) printf("%d ",p->data);
printf("\n");
}ቤተ መጻሕፍቲ ባይዱ
显示操作菜单函数scan()
(4.调试分析
1)分析算法的总体结构,分清程序中各部分应实现的功能;
printf(" |--------------------------------------|\n");
printf(" | 3.删除数据|\n");
printf(" |--------------------------------------|\n");
printf(" |======================================|\n");
E=p->data; //取第i个元素
Return OK;
}//GetElem_L
插入算法2.9
Status ListInsert _L(LinkList &L,int i,ElemType e){
//在带头结点的单链线性表L中第i个位置之前插入元素e
P=L;j=0;
While (p&&j<i-1){p=p->next; ++j;} //寻找第i-1个结点
}
If(!(->next)||j>i-1)return ERROR; //删除位置不合理
q=p->next; p->next=q->next; //删除并释放结点
e=q->data; free(q);
return OK;
}//ListDelete_L
输出单链表算法:…
void printlist_l(linklist l){
printf(" ========================================\n");
scanf("%d",&s);
switch(s){
case 1:
printf("请输入要查询的数:");
scanf("%d",&i);
相关主题