实验二链表的基本操作.doc
文本预览下载声明
洛阳理工学院实验报告
系部 计算机系 班级 B140502 学号 姓名 韩亚辉 课程名称 数据结构 实验日期 2015-10-13 实验名称 链表的基本操作 成绩 实验目的:
(1)掌握线性表的链式存储结构的特点;
(2)掌握线性表的基本操作:初始化、插入、删除、查找数据元素等运算在链式存储结构上的实现。 实验条件:计算机一台、Visual C++ 6.0 实验内容与算法思想:
内容:
建立一有序的链表,实现下列操作:
1.把元素x插入表中并保持链表的有序性;
2.查找值为x的元素,若找到将其删除;
3.输出表中各元素的值。
算法思想:
先是创建头指针初始化一个空链表。调用指针创建函数,用头插法把元素输入链表。然后在一个switch函数里面调用函数,选择实现输出、查找、插入和删除等操作。 运行结果:首先在主菜单界面输入0选择初始化建立链表(以$为结尾输入),输入1 2 5 8 9$完成建立链表返回主菜单;选择1进行插入操作,然后输入插入位置3和插入元素4,插入成功,输入y回到主菜单;选择2进行删除操作,输入要删除的元素5,删除成功,输入y返回主菜单;选择3进行链表输出,输出结果1 2 4 8 9,输入y返回主菜单;选择4结束程序。 实验总结:
通过上机实验更加熟练了解有关链表的各种算法,加深了对C语言的了解。基本掌握了基于链表的创建、查找、插入和删除等操作。
附:源程序:
#includestdio.h
#includemalloc.h
#includestdlib.h
#define ERROR 1
#define OK 0
typedef char ElemType;
typedef struct Node
{
ElemType data;
struct Node * next;
}Node,* LinkList;
void InitList(LinkList * L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)-next=NULL;
}
void CreateFromTail(LinkList L)
{
Node *r,*s;
int flag=1;
ElemType c;
r=L;
while(flag)
{
c=getchar();
if(c!=$)
{
s=(Node *)malloc(sizeof(Node));
s-data=c;
r-next=s;
r=s;
}
else
{
flag=0;
r-next=NULL;
}
}
}
int InsList(LinkList L,int i,ElemType e)
{
Node * pre,*s;
int k;
if(i=0)return ERROR;
pre=L;
k=0;
while(pre!=NULLki)
{
pre=pre-next;
k=k+1;
}
if(!pre) return ERROR;
s=(Node *)malloc(sizeof(Node));
s-data=e;
s-next=pre-next;
pre-next=s;
return OK;
}
Node * Locate(LinkList L,ElemType key)
{
void display();
Node *p,*pt;
p=L-next;
pt=p-next;
if(p-data==key)
{
L-next=pt;
free(p);
}
else while(pt!=NULL)
{
if(pt-data!=key)
{
pt=pt-next;
p=p-next;
}
else
{
p-next=pt-next;
free(pt);
break;
}
}
if(pt==NULL)printf(无该元素\n);
else printf(该元素已删除\n);
return L;
}
void display(LinkList L)
{
Node *p;
p=L-next;
while(p!=NULL)
{
printf(%c,p-data);
p=p-next;
}
}
int main()
{
int i,
显示全部