实验一 线性表的操作及应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%d",&i);
e=Locate_LinkList(L,i);
if(e==NULL)
printf("第i个元素不存在。\n");
else
printf("%d\n",e->data);
/*(输出单链表中的长度)*/
y=Length_LinkList (L);
printf("该链表的长度为%d。\n",y);
{
// 实现此函数;
int e;
H=H->next;
while(H)
{
e=H->data;
printf("%d ",e);
H=H->next;
}
return 1;
}
void InvertList( LinkList L )// 单链表逆置
{
LinkList p , q ;
p = L->next;
L->next = NULL;
}
p= Locate_LinkList( H, i-1);
if (!p)
{ printf("参数 i 错");
return (0); /*第i个结点不存在不能删除*/
}
q=p->next;
p->next=q->next;
delete q;
return (1);
}
int Print_LinkList(LinkList H)
while(p&&j<i)
{
p=p->next;
++j;
}
if ( !p||j>i )
{
printf("参数 i 错或单链表不存在");
return (NULL);
} /*第i个结点不存在*/
return (p);
}
int Insert_LinkList( LinkList H, int i, DataType x)
{LinkList p, q;
p= Locate_LinkList(H, i-1); /*找第i-1个结点地址*/
int j=0;
if(p==NULL)
{
printf("不能在该位置插入元素。\n");
return 0;
}
else
{
q=new LNode;
q->data=x;
q->next=p->next;
p->next=q;
}
return 1; /*插入成功,则返回*/
}
int Del_LinkList(LinkList H, int i)
{ /*删除单链表H上的第i个结点;返回参数:0不成功,1成功*/
LinkList p, q;
if (!H->next)
{
printf("空表不能删除");
return (0);
while ( p ){
q=p->next;
p->next=L->next;
L->next =p;
p=q;
}源自文库
}
int main(void)
{
LinkList L;
L=Creat_LinkList();
int i,n,j,x,m,y=0;
LinkList e;
/*(向单链表中插入n个元素)*/
printf("请输入要插入的元素个数n和插入的位置m:");
scanf("%d%d",&n,&m);
for(j=0;j<n;j++)
{
printf("请输入要插入的第%d个元素:",j+1);
scanf("%d",&x);
y=Insert_LinkList( L,m,x);
if(y==1)
{
y=0;
printf("成功插入第%d个元素。\n",j+1);
}
}
H->next=NULL;
return H;
}
void Destroy_LinkList(LinkList H)
{ /*销毁单链表,入口参数:单链表头指针的地址,出口参数:无*/
LinkList p,q;
p=H;
/*释放单链表的所有结点*/
q=p->next;
p->next=q->next;
delete q;
y=0;
/*(将单链表逆置,并输出逆置后单链表中的元素)*/
InvertList(L);
y=Print_LinkList(L);
if(y==1)
printf("已成功输出逆置后单链表中的全部元素。\n");
y=0;
/*(销毁单链表)*/
Destroy_LinkList(L);
return 0;
}
运行结果图
/*(输出单链表中的元素)*/
y=Print_LinkList(L);
if(y==1)
printf("已成功输出单链表中的全部元素。\n");
y=0;
/*(删除单链表中i个元素)*/
printf("请输入要删除的第i个元素:");
scanf("%d",&i);
y=Del_LinkList(L,i);
实验一线性表的操作及应用
1.实验目的
掌握线性表的创建、插入、删除、检索、求长度、销毁等操作链式存储结构上的实现。
掌握单链表表逆置的程序实现方法。
2.实验环境
Visual C++ 6.0
4.实验报告内容
(1)给出单链表的存储结构定义。
(2)给出在链式存储结构上实现线性表的插入操作的基本设计思想,并用C语言实现。
LinkList Creat_LinkList(void )
{ /*创建空单链表,入口参数:无;返回值:单链表的头指针,0代表创建失败,非0表成功*/
LinkList H;
H=(LinkList)malloc(sizeof(LNode));
if (H) /*确认创建头结点创建是否成功,若成功,修改单链表头结点的指针域为0表空表*/
H=NULL; /*将头指针变为零表示单链表不存在*/
}
int Length_LinkList (LinkList H)
{ /* 求单链表表长,入口参数:单链表头指针,出口参数:表长,-1表示单链表不存在。*/
LinkList p=H; /* p指向头结点*/
int count= -1; /*H带头结点所以从-1开始*/
if(y==1)
printf("成功删除单链表中的第%d个元素。\n",i);
/*(输出单链表中的元素)*/
y=Print_LinkList(L);
if(y==1)
printf("已成功输出单链表中的全部元素。\n");
y=0;
/*(查找单链表中的第i个元素)*/
printf("输入要查找的单链表中的第i个元素:");
p=p->next;
while(p)
{
count++;
p=p->next;
}
count++;
return (count);
}
LinkList Locate_LinkList( LinkList H, int i)
{ LinkList p; int j; p=H; j=0;
/*查找第i个结点*/
p=H;
代码:
#include <stdio.h>
#include <malloc.h>
typedef int DataType;
typedef struct node{
DataType data; /*每个元素数据信息*/
struct node *next; /*存放后继元素的地址*/
} LNode, *LinkList;
(3)给出在链式存储结构上实现线性表的删除操作的基本设计思想,并用C语言实现。
(4)给出在链式存储结构上实现线性表的查找值为e操作的基本设计思想,并用C语言实现。
5.实验报告要求
(1)字迹清晰;
(2)代码格式符合规范,有缩进,关键之处有注释;
(3)实验心得体会和问题建议要根据实际情况填写,不得为空。
相关文档
最新文档