数据结构实验报告2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告
二.程序设计相关信息
(1)实验题目:编写一个程序algo2-3.cpp,实现双链表的各种基本运算,并在此基础上设计一个主程序完成如下功能:
1.初始化双链表h;
2.依次采用尾插法插入a,b,c,d,e元素;
3.输出双链表h;
4.输出双链表h长度;
5.输出双链表h是否为空;
6.判断双链表h的第3个元素;
7.输出元素‘a’的位置;
8.在第4个元素位置上插入‘f’元素;
9.输出双链表h;
10.删除L的第3个元素;
11.输出双链表h;
12.释放双链表h。
(2)实验目的:熟悉双链表的基本操作并掌握尾插法建表。
(3)算法描述或流程图
(4)源代码
#include
typedef struct DNode
{ char data;
struct DNode *next;
struct DNode *prior;
}DNode,DLinkList;
void initlist(DLinkList *&h) { h=(DLinkList*)malloc(sizeof(DLinkList)) ;
h->next=NULL;
h->prior=NULL;
}
void destroylist(DLinkList *&h)
{ DLinkList *p=h,*q=p->next;
while(q!=NULL)
{free(p);
p=q;
q=p->next;
}
free(p);
}
int getelem(DLinkList *h,int i,char &e)
{int j=0;
DLinkList *p=h;
while(j
{j++;
p=p->next;
}
if(p==NULL)
return 0; else
{ e=p->data;
return 1;
}
}
int listempty(DLinkList *h)
{ return(h->next==NULL&&h->prior==NULL);
}
int listlength(DLinkList *h)
{ DLinkList *p=h;int n=0;
while(p->next!=NULL)
{n++;
p=p->next;
}
return (n);
}
void displist(DLinkList *h)
{ DLinkList *p=h->next;
while(p!=NULL)
{printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
int locateelem(DLinkList *h,char e)
{ DLinkList *p=h->next;
int i=1;
while(p!=NULL&&p->data!=e)
{p=p->next;
i++;
}
if(p==NULL)
return 0;
else
return i;
}
int listinsert(DLinkList *&h,int i,char e) {int j=0;
DLinkList *p=h,*s;
while(j {j++; p=p->next; } if(p==NULL) return 0; else {s=(DLinkList*)malloc(sizeof(DLinkList)); s->data=e; s->next=p->next; if(p->next!=NULL) p->next->prior=s; s->prior=p; p->next=s; } return 1; } int listdelete(DLinkList*&h,int i) {int j=0; DLinkList *p=h,*q; while(j {j++; p=p->next; } if(p==NULL) return 0; else {q=p->next; if(q==NULL) return 0; p->next=q->next; if(p->next!=NULL) p->next->prior=p; free(q); return 1; } } void main() {DLinkList *h,*s,*r;int i;char e; initlist(h); r=h; for(i='a';i<'f';i++) {s=(DLinkList*)malloc(sizeof(DLinkList)); s->data=i; r->next=s;s->prior=r; r=s; } r->next=NULL; printf("输出双链表h:"); displist(h); listlength(h); printf("双链表的长度为%d\n",listlength(h)); listempty(h); printf("双链表是否为空,1表示是,0表示否:%d\n",listempty(h)) ; getelem(h,3,e); printf("输出双链表的第三个元素:%c\n",e); locateelem(h,'a'); printf("a的位置为%d\n",locateelem(h,'a')); listinsert(h,4,'f'); printf("输出插入后的双链表h:"); displist(h); listdelete(h,3); printf("输出删除后的双链表h:"); displist(h); destroylist(h); }