数据结构线性表实验报告Word格式.docx
《数据结构线性表实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构线性表实验报告Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
(2)
设计一个测试主函数,实际运行验证所设计单循环链表的正确性。
2-22.设计一个有序顺序表,要求:
有序顺序表的操作集合有如下操作:
初始化、求数据元素个数、插入、删除和取数据元素。
有序顺序表与顺序表的主要区别是:
有序顺序表中的数据元素按数据元素值非递减有序。
设计一个测试主函数,实际运行验证所设计有序顺序表的正确性。
(3)
设计合并函数ListMerge(L1,L2,L3),功能是把有序顺序表L1和L2中的数据元素合并到L3,要求L3中的数据元素依然保持有序。
并设计一个主函数,验证该合并函数的正确性。
程序代码:
2-21
(1)头文件LinList.h如下:
typedefstructnode
{
DataTypedata;
structnode*next;
}SLNode;
/*
(1)初始化ListInitiate(SLNode**head)*/
voidListInitiate(SLNode**head)
{/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/
if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
(*head)->
next=NULL;
/*置结束标记NULL*/
}
/*
(2)求当前数据元素个数ListLength(SLNode*head)*/
intListLength(SLNode*head)
{
SLNode*p=head;
intsize=0;
while(p->
next!
=head)
p=p->
next;
size++;
returnsize;
/*(3)插入ListInsert(SLNode*head,inti,DataTypex)*/
/*在带头结点的单链表的第i(0<
=i<
=size)个结点前*/
/*插入一个存放数据元素x的结点。
插入成功时返回1,失败返回0*/
intListInsert(SLNode*head,inti,DataTypex)
SLNode*p,*q;
intj;
p=head;
j=-1;
=head&
&
j<
i-1)
/*最终让指针指向第i-1个结点*/
j++;
if(j!
=i-1)
printf("
Theinsertedpositioniserror!
"
);
return0;
/*生成新结点由指针q指示*/
if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
q->
data=x;
next=p->
p->
next=q;
return1;
/*(4)删除ListDelete(SLNode*head,inti,DataType*x)*/
/*删除带头结点的单链表head的第i(0<
/*被删除结点的数据元素域由x带回。
删除成功时返回1,失败返回0*/
intListDelete(SLNode*head,inti,DataType*x)
SLNode*p,*s;
next->
Thedeletedpositionofparameteriserror!
s=p->
/*指针s指指向ai结点*/
*x=s->
data;
/*删除*/
free(s);
/*释放指针s所指结点的内存空间*/
/*(5)取数据元素ListGet(SLNode*head,inti,DataType*x)*/
intListGet(SLNode*head,inti,DataType*x)
SLNode*p;
i)
=i)
Thegottenpositionofparameteriserror!
*x=p->
/*(6)撤销单链表Destroy(SLNode**head)*/
voidDestroy(SLNode**head)
SLNode*p,*p1;
p=*head;
while(p!
=NULL)
p1=p;
free(p1);
*head=NULL;
(2)测试主函数如下:
#include<
stdio.h>
/*包含printf()函数*/
stdlib.h>
/*包含exit()函数*/
malloc.h>
/*包含malloc()函数*/
typedefintDataType;
/*定义DataType为int*/
#include"
LinList.h"
/*包含单链表的头文件*/
voidmain(void)
SLNode*head;
/*定义头指针变量*/
inti,x;
ListInitiate(&
head);
/*初始化*/
for(i=0;
i<
10;
i++)/*插入10个数据元素*/
if(ListInsert(head,i,i+1)==0)
error!
\n"
return;
if(ListDelete(head,4,&
x)==0)/*删除第四个数据元素*/
i<
ListLength(head);
i++)/*显示当前数据元素*/
if(ListGet(head,i,&
x)==0)/*取数据元素*/
}
else
%d"
x);
/*显示*/
Destroy(&
/*撤销单链表*/
}
2-22设计一个有序顺序表
头文件程序如下:
#defineNULL0
typedefstruct
DataTypeList[MaxSize];
intsize;
}SeqList;
voidlistInitiate(SeqList*L)/*初始化顺序表L*/
L->
size=0;
/*定义初始化数据元素个数*/
intListLength(SeqListL)
returnL.size;
intListInsert(SeqList*L,inti,DataTypex)
if(L->
size>
=MaxSize)
顺序表已满无法插入!
elseif(i<
0||i>
L->
size)
参数i不合法!
for(j=L->
size;
j>
i;
j--)
List[j]=L->
List[j-1];
List[i]=x;
size++;
intListDelete(SeqList*L,inti,DataType*x)
if(L->
size<
=0)
顺序表已空无数据元素可删!
elseif(i<
size-1)
*x=L->
List[i];
for(j=i+1;
size-1;
j++)
List[j-1]=L->
List[j];
size--;
intListGet(SeqListL,inti,DataType*x)
if(i<
L.size-1)
*x=L.List[i];
/*测试主函数设计如下:
*/
#include<
#defineMaxSize100
SeqList.h"
intSLOrderInsert(SeqList*L,DataTypex)
intj;
if(L->
=MaxSize-1)
printf("
for(j=L->
j>
0&
x<
list[j];
j--)
list[j+1]=L->
list[j+1]=x;
return1;
{
SeqListMyList;
inta[]={1,2,4,5,6,8,9};
/*数组a中的数据元素递增有序*/
inti,n=7;
intx;
ListInitiate(&
MyList);
for(i=0;
n+1;
i++)
SLOrderInser