线性表的实现及操作二Word文件下载.docx
《线性表的实现及操作二Word文件下载.docx》由会员分享,可在线阅读,更多相关《线性表的实现及操作二Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。
需要用到的语句包括voidListInitiate(SeqList*L)
intListInsert(SeqList*L,inti,DataTypex)
intListDelete(SeqList*L,inti,DataType*x)
intListGet(SeqListL,inti,DataType*x)等。
实验二是对单链表进行建立,插入,删除等基本操作。
需要的语句为voidListInitiate(SeqList*L)
实验四为二叉树,要求建立一个二叉树,并实现前序,中序及后序的遍历。
所需语句包括voidListInitiate(SeqList*L)
实验六的内容是图的遍历包括邻接矩阵和邻接链表两种方法。
三、程序代码
(更正后的代码)
#include<
stdio.h>
#defineMaxSize100
typedefintDataType;
typedefstruct
{
DataTypelist[MaxSize];
intsize;
}SeqList;
voidListInitiate(SeqList*L)/*初始化顺序表L*/
L->
size=0;
/*定义初始数据元素个数*/
}
intListLength(SeqListL)/*返回顺序表L的当前数据元素个数*/
returnL.size;
intListInsert(SeqList*L,inti,DataTypex)
/*在顺序表L的位置i(0≤i≤size)前插入数据元素值x*/
/*插入成功返回1,插入失败返回0*/
intj;
if(L->
size>
=MaxSize)
{
printf("
顺序表已满无法插入!
\n"
);
return0;
}
elseif(i<
0||i>
L->
size)
参数i不合法!
else
{
for(j=L->
size;
j>
i;
j--)L->
list[j]=L->
list[j];
/*为插入做准备*/
list[i]=x;
/*插入*/
size++;
/*元素个数加1*/
return1;
intListDelete(SeqList*L,inti,DataType*x)
/*删除顺序表L中位置i(0≤i≤size-1)的数据元素值并存放到参数x中*/
/*删除成功返回1,删除失败返回0*/
size<
=0)
顺序表已空无数据元素可删!
size-1)
参数i不合法"
{//此段程序有一处错误
*x=L->
list[i];
/*保存删除的元素到参数x中*/
for(j=i+1;
j<
=L->
size-1;
j++)L->
list[j-1];
/*依次前移*/
size--;
/*数据元素个数减1*/
intListGet(SeqListL,inti,DataType*x)
/*取顺序表L中第i个数据元素的值存于x中,成功则返回1,失败返回0*/
if(i<
L.size-1)
*x=L.list[i];
voidmain(void)
{SeqListmyList;
inti,x;
ListInitiate(&
myList);
for(i=0;
i<
10;
i++)
ListInsert(&
myList,i,i+1);
ListDelete(&
myList,4,&
x);
ListLength(myList);
i++)
ListGet(myList,i,&
//此段程序有一处错误
printf("
%d"
x);
}
测试结果:
线性表的实现及操作
(二)
了解和掌握线性表的链式存储结构;
假设该线性表的数据元素个数在最坏情况下不会超过100个,要求使用单链表。
程序中有3处错误的地方,有标识,属于逻辑错误,对照书中的代码仔细分析后,要求同学们修改错误的代码,上机调试并得到正确的运行结果。
三、程序代码:
(更正后的结果)
/*该文件包含pringtf()等函数*/
stdlib.h>
/*该文件包含exit()等函数*/
malloc.h>
/*该文件包含malloc()等函数*/
/*定义DataType为int*/
typedefstructNode
DataTypedata;
structNode*next;
}SLNode;
voidListInitiate(SLNode**head)/*初始化*/
/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/
if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
(*head)->
next=NULL;
/*置链尾标记NULL*/
intListLength(SLNode*head)
SLNode*p=head;
/*p指向首元结点*/
intsize=0;
/*size初始为0*/
while(p->
next!
=NULL)/*循环计数*/
p=p->
next;
size++;
returnsize;
intListInsert(SLNode*head,inti,DataTypex)
/*在带头结点的单链表head的数据元素ai(0≤i≤size)结点前*/
/*插入一个存放数据元素x的结点*/
SLNode*p,*q;
p=head;
j=-1;
/*j初始为-1*/
=NULL&
&
i-1)
/*最终让指针p指向数据元素ai-1结点*/
j++;
if(j!
=i-1)
插入位置参数错!
"
/*生成新结点由指针q指示*/
if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
q->
data=x;
//此段程序有一处错误
p->
next=q->
/*给指针q->
next赋值*/
next=q;
/*给指针p->
next重新赋值*/
return1;
intListDelete(SLNode*head,inti,DataType*x)
/*删除带头结点的单链表head的数据元素ai(0≤i≤size-1)结点*/
/*删除结点的数据元素域值由x带回。
删除成功时返回1;
失败返回0*/
SLNode*p,*s;
next->
next!
j++;
s=p->
/*指针s指向数据元素ai结点*/
*x=s->
data;
/*把指针s所指结点的数据元素域值赋予x*/
next=s->
/*把数据元素ai结点从单链表中删除指*/
free(s);
/*释放指针s所指结点的内存空间*/
intListGet(SLNode*head,inti,DataType*x)
/*取数据元素ai和删除函数类同,只是不删除数据元素ai结点*/
SLNode*p;
i)
=i)
取元素位置参数错!
*x=p->
voidDestroy(SLNode**head)
SLNode*p,*p1;
p=*head;
while(p!
=NULL)
p1=p;
free(p1);
*head=NULL;
SLNode*head;
head);
/*初始化*/
if(ListInsert(head,i,i+1)==0)/*插入10个数据元素*/
{
错误!
return;
if(ListDelete(head,4,&
x)==0)/*删除数据元素5*/
return;
ListLength(head);
if(ListGet(head,i,&
x)==0)/*取元素*/
elseprintf("
/*显示数据元素*/
Destroy(&
测试结果为: