- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
双向链表的基本操作和应用
一、实验目的:
1.掌握双向线性表的逻辑特征
2.熟练掌握带头结点的双向链式表的指针操作、能完成双向链表的插入、删除、
获取指定位序结点指针、遍历、和复杂应用;
二、实验内容(双向链式线性表)
1.熟悉Visual Studio 6.0,会设置断点,会查看运行过程中的指针情况;
2.编写双向链表的插入、删除、获取指定位序的结点、遍历函数;
3.实现将a1,a2,a3…an 的双向链表转变为:a1,a3…a4,a2;
三、实验结果
#include stdio.h
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;jlocate;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;jlocate;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);
文档评论(0)