线性表实验报告
/*单链表的结点类型*/
typedef struct LNode
{DataType data;
struct LNode *next;
}LNode,*LinkedList;
LinkedList LinkedListInit()//初始化单链表
void LinkedListClear(LinkedList L)//清空单链表
}
}
(10)建立单链表
LinkedList LinkedListCreat( )
{ LinkedList L=LinkedListInit(),p,r;
int x;
r=L;
printf("请依次输入链表中的元素,输入负数时结束\n");
scanf("%d",&x);
while (x>=0)
{p=(LinkedList)malloc(sizeof(LNode));
2.编制一个能求解除约瑟夫环问题答案的程序。
实验一线性表表的基本操作
问题描述:
1.实现单链表的定义和基本操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义
程序中的单链表(带头结点)结点为结构类型,结点值为整型。
/*定义DataType为int类型*/
typedef int DataType;
{ LinkedList p,q;
int j;
j=1;p=L;
while(p->next&&j<i)
{p=p->next;j++;}
if(p->next==NULL)
printf("删除位置不正确\n");
else {q=p->next;p->next=q->next;free(q);
printf("第%d个元素已从链表中删除\n",i);
3.试单链表实现一个简单的电子通讯本管理软件,要求能查找联系地址,增加和删除联系人。联系方式假定包括姓名、电话和地址。
基本要求:
1.上机前要做好准备工作,包括程序框图、数据结构以及算法。
2.按时实验
3.服从实验室老师的安排
4.独立实验,有问题可以讨论,但不得翻版。
5.遵守实验室的各项纪律。
四、概要设计
初始条件:单链表L已存在;
操作结果:显示链表L中第i个节点个元素值,若链表L中没有第i个节点则显示查询位置不正确;
LinkedListLocate(&L,x)
初始条件:单链表L已存在;
操作结果:显示链表L中元素x的位置,若链表L中没有元素x则显示所查找元素不存在;
LinkedListInsert(&L,i,x)
L->next=NULL;
return L;
}
(2)清空单链表
void LinkedListClear(LinkedList L)
{L->next=NULL;
printf("链表已经清空\n");
}
(3)检查单链表是否为空
int LinkedLif(L->next==NULL) return TRUE;
printf("按其它键结束\n");
scanf("%d",&x);
switch(x)
{case 1:L=LinkedListInit();printf("链表已经初始化\n");break;
case 2:LinkedListClear(L);printf("\n");break;
case 3:printf("链表的长度为%d\n",LinkedListLength(L));break;
return j;
}
(6)从链表中查找元素
LinkedList LinkedListGet(LinkedList L,int i)
{LinkedList p;int j;
p=L->next; j=1;
while (p!=NULL && j<i )
{p=p->next; j++; }
if (j==i) return p;
if(h)
printf("%d在链表中的位置是:%d\n",e,h);
else printf("链表中没有值为%d的元素\n",e);
break;
case 8:printf("请输入插入元素的位置和值(中间以空格或回车分隔):\n");
printf("1.初始化2.清空3.求链表长度4.检查链表是否为空\n");
printf("5.遍历链表6.从链表中查找元素\n");
printf("7.从链表中查找与给定元素值相同的元素在顺序表中的位置\n");
printf("8.向链表中插入元素9.从链表中删除元素\n");
printf("10.建立单链表\n");
五.详细设计
1结点类型和指针类型
typedef struct LNode
{int data;
struct LNode *next;
} LNode,*LinkedList;
2单链表的基本操作
(1)初始化单链表
LinkedList LinkedListInit()
{LinkedList L;
L=(LinkedList)malloc(sizeof(LNode));
else return FALSE;
}
(4)遍历单链表
void LinkedListTraverse(LinkedList L)
{LinkedList p;
p=L->next;
if(p==NULL) printf("单链表为空表\n");
else
{printf("链表中的元素为:\n");
while(p!=NULL)
case 4:i= LinkedListEmpty(L);if(i)printf("链表为空\n");else printf("链表非空\n");break;
case 5:LinkedListTraverse(L); break;
case 6:printf("请输入待查询元素在链表中的位置:");
scanf("%d",&j);
p=LinkedListGet(L,j);
if(p) printf("链表中第%d个元素的值为:%d\n",j,p->data);
else printf("查询位置不正确\n");
break;
case 7:printf("请输入待查询元素的值:");
scanf("%d",&e);
h=LinkedListLocate(L,e);
LinkedListCreat()
初始条件:单链表L已存在;
操作结果:建立了一个带头节点的非空链表;
LinkedListClear(&L)
初始条件:单链表L已存在;
操作结果:将L重置为带头节点的空链表;
LinkedListEmpty(&L)
初始条件:单链表L已存在;
操作结果:如果链表L为空则返回1,链表L非空则返回0;
1.单链表的操作
(1)为了实现上述程序功能,需要定义单链表的抽象数据类型:
ADT LinkedList {
数据对象:D={ai|ai∈struct LNode set,i=0,1,2,…,n,n≥0}
数据关系:R={<ai,ai+1>|ai,ai+1∈D}
基本操作:
LinkedListInit()
操作结果:构造了一个带头节点的空链表L;
/*从单链表表中查找与给定元素值相同的元素在链表中的位置*/
intLinkedListLocate(LinkedList L, DataType x)
void LinkedListInsert(LinkedList L,int i,DataType x)//向单链表中插入元素
/*从单链表中删除元素*/
if(p==NULL||j>i)
printf("插入位置不正确\n");
else {s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
printf("%d已插入到链表中\n",x);
}
}
(9)从链表中删除元素
void LinkedListDel(LinkedList L,int i)
{printf("%d ",p->data); p=p->next;}
}
printf("\n");
}
(5)求单链表长度
int LinkedListLength (LinkedList L)
{LinkedList p;
int j;
p=L->next;
j=0;
while(p!=NULL)
{ j++;p=p->next; }
7.从单链表表中查找元素函数LinkedListGet()
8从单链表表中查找指定元素的位序函数LinkedListLocate()