双向链表的基本操作和应用实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

双向链表的基本操作和应用

一、实验目的:

1.掌握双向线性表的逻辑特征

2.熟练掌握带头结点的双向链式表的指针操作、能完成双向链表的插入、删除、获取指定位序结点指针、遍历、和复杂应用;

二、实验内容(双向链式线性表)

1.熟悉Visual Studio 6.0,会设置断点,会查看运行过程中的指针情况;

2.编写双向链表的插入、删除、获取指定位序的结点、遍历函数;

3.实现将a1,a2,a3…an的双向链表转变为:a1,a3…a4,a2;

三、实验结果

#include

typedef struct DuLNode{

char date;

struct DuLNode *prior;

struct DuLNode *next;

}DuLNode,*DuLinkList;

void DuLinkedListInsert_L(DuLinkList &L, int locate, char c)

{

DuLNode* p=new DuLNode;

p->date=c;

DuLNode* q=L;

for(int j=0;j

q=q->next;

p->next=q->next;

q->next->prior=p;

p->prior=q;

q->next=p;

++L->date;

}// DuLinkedListInsert_L

void DuLinkedListDelete_L(DuLinkList &L, int locate, char &e)

{

DuLNode* q=L;

for(int j=0;j

q=q->next;

e=q->date;

q->next->prior=q->prior;

q->prior->next=q->next;

--L->date;

delete q;

}// DuLinkedListDelete_L

void PrintfDuList(DuLinkList L)

{

DuLNode*p=L->next;

while(p!=L)

{

printf("%2c",p->date);

p=p->next;

}

printf("\n");

}// PrintfDuList

void DuLinkedListexchangete_L (DuLinkList &L)

{

char e;

DuLNode* q=L;

for(int j=2;j< (L->date+3)/2;j++)

{

DuLinkedListDelete_L(L, j, e);

DuLinkedListInsert_L(L, L->date-j+2, e);

}

}// DuLinkedListexchangete_L

void main()

{

char c,e;

int i,j;

i=0;

DuLNode* A=new DuLNode;

A->date=0;

A->next=A;

A->prior=A;

printf("请输入A单词,以回车结束:");

scanf("%c",&c);

while(c!=10)

{

DuLinkedListInsert_L(A, i, c);

i++;

scanf("%c",&c);

}

printf("表A的元素个数为:%d\n",A->date);

printf("带头结点的双向循环链表A的数据为:\n");

PrintfDuList(A);

DuLinkedListexchangete_L (A);

PrintfDuList(A);

printf("表A的元素个数为:%d\n",A->date);

printf("请输入要删除在表中的位置:\n");

scanf("%d",&j);

DuLinkedListDelete_L(A,j,e);

printf("被删除的数据为:%c\n",e);

printf("被删除数据后的双向循环链表A的数据为:\n");

PrintfDuList(A);

printf("被删除数据后的双向循环链表A的元素个数为:%d\n",A->date);

}

四、实验中遇到的问题及解决方法

遇到的问题:能不能利用修改原表实现数据重排功能。

解决方法:利用直接在原表中删除数据和插入数据实现了数据重排功能,而且此操作的空间复杂度为0(1),新建表再用删除插入函数的操作的空间复杂度为0(n)。

五、心得体会

这次的实验对我来说非常的有难度,通过本次实验,我更加熟练地掌握了双向线性表的逻辑特征和熟练掌握带头结点的双向链式表的指针操作。在实验中遇到了一些问题,但通过同学的指导最终解决了。完成这次作业后使我又进一步提高了程序编写的能力和增加了我对数据结构的兴趣。

相关文档
最新文档