当前位置:
文档之家› 武汉理工大学数据结构线性表实验报告
武汉理工大学数据结构线性表实验报告
各函数如下:
Status CreateList_L(LinkList &L,int n)//用头插法建立一个长度为n的单链表
{
int i;LinkList p,s;
L->next=NULL;
L = (LinkList)malloc(sizeof (LNode));
L->next = NULL;p=L;
printf("第%d个元素的前驱为v=%d",i,v);
return OK;
}
Status Backwardlist(LinkList &L,int i,ElemType &x)//第i个元素的后继
{
int j;LinkList p,q;
p=L;j=0;
while(p->next&&j<i-1){
for (i=n; i>0;i--)
{
s = (LinkList) malloc (sizeof (LNode));
printf("输入新节点:");
scanf("%d",&s->data);
p->next=s;
p=p->next;p->next=NULL;
}
return OK;
}
Status Listprintf(LinkList &L)//遍历函数
return L.length;
}
void ListPrintf(SqList &L,int len)//顺序表的遍历
{
int i;
for(i=0;i<len;i++)
printf("%d\t",L.elem[i]);
}
Status ListInsert(SqList &L,int i,ElemType e)//在第i个元素前插入元素e
{
LinkList p=L;int len=0,e;
p=p->next;
while(p)
{
len++;
e=p->data;
p=p->next;
printf("%d ",e);
}
printf("该链表的长度为%d",len);
return OK;
}
Status ListInsert(LinkList &L,int i,ElemType e)//在第i个元素前插入一个元素e
L.listsize,L.elem);
int length;
printf("输入表的长度length=");
scanf("%d",&length);
ListCreate(L, length);
ListPrintf(L,length);
int n,m;
printf("\n请输入要插入的位置(第n个元素前)n=");
ListLength(L);
return OK;
}
Status ListDelete(SqList &L,int i,ElemType &e)//删除第i个元素之前的元素
{
ElemType *p,*q;
if(i<1||i>L.length)
return ERROR;
p=L.elem+i-1;
e=*p;
j++;p=p->next;
}
if(!(p->next)||j>i-1||p->next==NULL) return 0;
q=p->next;p->next=q->next;
x=q->data;
printf("第%d个元素的后继为x=%d",i,x);
return OK;
}
测试主函数如下:
Void main(void)
实验内容:
掌握顺序表和单链表下建表、遍历、插入、删除、求前驱、求后继等算法的实现;实验来自原理步
骤
、
一、实现顺序表的建立、插入数据、删除、遍历、求长度
各函数代码及解释如下:
Status SqlistCreate(SqList &L,int len)
//顺序表的建立函数:从键盘接收数据,依次放入顺序表
{int i;
scanf("%d",&n);
printf("请输入要插入的数据m=");
scanf("%d",&m);
ListInsert(L,n,m);
int i,e;
printf("输入要删除的第i个元素i=");
scanf("%d",&i);
ListDelete(L,i,e) ;
}
实
验
结
果
及
分
析
:
二、单链表的建立与操作
{LinkList L;
int a;
int i,j;
int m;
int k,l,v,x;
ElemType e;
InitList(L);
printf("请输入初始链表的长度");
scanf("%d",&a);
CreateList_L(L,a);
Listprintf(L);
printf("要插入的位置(第i个元素前)i=");
{
int j=0;
LinkList s,p=L;
while(p&&j<i-1)
{ j++;
p=p->next;
}
if(!p||j>i-1)
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LIST_INCREMENT;
}
q=L.elem+i-1;
for(p=L.elem+L.length-1;p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
ListPrintf(L,L.length);
{
ElemType *newbase,*q,*p;
if(i<1||i>L.length+1)
return ERROR;
if(L.length==L.listsize)
{ newbase=(ElemType*)realloc(L.elem,
(L.listsize+LIST_INCREMENT)*sizeof(ElemType));
if(!(p->next)||j>i-1) return 0;//删除位置不合理
q=p->next;p->next=q->next;e=q->data;
printf("删除的元素为%d",e);printf("\n");
free(q);
Listprintf(L);
return OK;
}
Status ForewardElist(LinkList &L,int i ,ElemType &v)//第i个元素的前驱
Listprintf(L);
return OK;
}
Status Listdelete(LinkList &L,int i,ElemType &e)//删除第i个元素
{
int j;LinkList p,q;
p=L;j=0;
while(p->next&&j<i-1){
j++;p=p->next;
}//循环结束后,p指针指向第i-1个元素,而p->next指向第i个节点
scanf("%d",&i) ;printf("要插入的元素m=");scanf("%d",&m);
ListInsert(L,i,m);
printf("删除的位置(第j个元素)j=");scanf("%d",&j);
Listdelete(L,j,e);
printf("你要求的第i个元素的前驱");
scanf("%d",&k);
for(i=0;i<len;i++)
{ printf("请输入第%d个元素",i+1);
scanf("%d",&L.elem[i]);
}
return 1;
L.length=len;
}
int ListLength(SqList L)//求顺序表的长度
{ printf("\n新表长度为%d",L.length);
{
int j;LinkList p,q;
p=L;j=0;
if(i==1) return 0;
while(p->next&&j<i-2){
j++;p=p->next;