自数据结构课程设计双向链表Word文件下载.docx

上传人:b****2 文档编号:6023241 上传时间:2023-05-05 格式:DOCX 页数:14 大小:48.91KB
下载 相关 举报
自数据结构课程设计双向链表Word文件下载.docx_第1页
第1页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第2页
第2页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第3页
第3页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第4页
第4页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第5页
第5页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第6页
第6页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第7页
第7页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第8页
第8页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第9页
第9页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第10页
第10页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第11页
第11页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第12页
第12页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第13页
第13页 / 共14页
自数据结构课程设计双向链表Word文件下载.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

自数据结构课程设计双向链表Word文件下载.docx

《自数据结构课程设计双向链表Word文件下载.docx》由会员分享,可在线阅读,更多相关《自数据结构课程设计双向链表Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。

自数据结构课程设计双向链表Word文件下载.docx

  intdata;

  

  struct dulnode*prior;

structdulnode *next;

}dulnode,*dulinklist;

●3.算法设计

3.1算法1:

创建双向链表

statuscreate_dul(dulinklist&l)   /*利用尾插法建立头带头结点的双向链表 */

   l=(dulinklist)malloc(sizeof(dulnode));

 /*生成头结点 */

l->

prior=NULL;

l->

next=NULL;

   /* 头结点的指针域初始值为空*/

 l->data=-1;

  q=l;

    /*尾指针初始指向头结点*/

    FILE*fp;

 /*定义文件指针的形式 */

  if((fp=fopen("

F:

\\test1.txt","

r+"))==NULL) /*打开文本文件 */

{

  printf("

cannotopenfile!

\n"

);

 exit(0);

}

ﻩintn;

fscanf(fp,"

%d"

&

n);

 for(i=0;

i<

n;

i++)

p =(dulinklist)malloc(sizeof(dulnode));

fscanf(fp,"

%d",&

p->

data);

/*在文件读取结点的数据*/

p->

next=NULL;

 /*新结点指针域为空*/

   p->

prior=q;

   q->

next=p;

   /*尾结点指针域指向新结点 */

   q=p;

  /*q指针后移,始终指向尾指针 */

 fclose(fp);

    /*关闭文本文件*/

}

3.2算法2:

双向链表的查找

staduslocateelem_dul(dulinklistl,elemtype e) /* 查找双线链表中第一个值为e的结点位置*/

{

 p=l->

next;

    /* p指向第一个结点 */

j=1;

      /*j表示结点位置*/

while((p->

data!

=e)&&

p){

 p=p->

next;

 ++j;

}        /*寻找第一个值为e的结点位置 */

 if(!

p)  return-1;

      

   else  return1;

3.3算法3:

双向链表的插入

status listinsert_dul(dulinklist&

l,int i,elemtypee) /*在双向链表l中的第i个位置之前插入新结点s*/

 p=l;

/*p指向头结点 */

j=0;

  /* j表示结点位置*/

 while(p&

&

(j<

i-1)){

   p=p->

next;

  ++j;

 }    /*寻找第i-1个结点位置*/

 if(!

p||j>

i-1) return ERROR;

 /*在l中确定插入位置,p=NULL或j>

i-1时,即插入位置不合法 */

  if(!

(s=(dulinklist)malloc(sizeof(dulnode)))) returnERROR;

/*动态生成新结点失败,则返回错误 */

  s->data=e;

      /*给新结点的数据域赋值*/

s->next=p->

next;

  p->

next->

prior=s;

  s->

prior=p;

 p->

next=s;

 /*在双向链表中插入新结点时指针的变化*/

return0;

3.4算法4:

双向链表的删除

statuslistdelete_dul(dulinklist &

l,inti,elemtype &

e)    /* 在双向链表l中,删除第i个结点*/

  p=l->

  /*p指向第一个结点*/

intj=1;

     /*j表示结点位置*/

while(p&

i)){

   p=p->

next;

  ++j;

 }    /*寻找第i个结点 */

   if(!

i)returnERROR;

   /*在l中确定第i个元素的位置指针p,p=NULL,即第i个元素不存在*/

  e=p->

data;

       /*把指针p的数据域的值赋给e*/

 p->

prior->

next=p->next;

 p->

next->prior=p->

prior;

     /*在双向链表中删除结点时指针的变化*/

 free(p);

     /*把结点p删掉 */

return 0;

●4.程序清单

#include<

iostream>

#include<

stdio.h>

usingnamespacestd;

typedefstructdulnode{

   intdata;

  /*数据域*/

 structdulnode*prior;

  /*指向前驱的指针域 */

  structdulnode*next;

  /* 指向后继的指针域*/

}dulnode,*dulinklist;

voidcreate_dul(dulinklist&

l)/*利用尾插法建立头带头结点的双向链表*/

 dulinklistp,q;

inti;

   l=(dulinklist)malloc(sizeof(dulnode));

 /* 生成头结点 */

 l->

prior=NULL;

  l->

next=NULL;

    /*头结点的指针域初始值为空*/

 l->

data=-1;

q=l;

 /*尾指针初始指向头结点 */

 FILE* fp;

   /*定义文件指针的形式*/

   if((fp=fopen("

H:

\\test1.txt"

,"

r+"))==NULL)/*打开文本文件*/

 {

printf("

cannotopen file!

\n"

);

  exit(0);

 }

 int n;

ﻩfscanf(fp,"%d"

  

for(i=0;

n;

ﻩ p=(dulinklist)malloc(sizeof(dulnode));

ﻩ fscanf(fp,"

%d",&p->

data);

 /*在文件读取结点的数据*/

ﻩp->

next=NULL;

   /*新结点指针域为空*/

   p->

prior=q;

  q->

next=p;

   /*尾结点指针域指向新结点*/

    q=p;

   /*q指针后移,始终指向尾指针 */

 fclose(fp);

  /*关闭文本文件 */

dulinklistlistinsert_dul(dulinklist&l,int i,inte)  /*在双向链表l中的第i个位置之前插入新结点s */

dulinklistp,s;

 p=l;

/*p指向头结点*/

 intj=0;

   /*j表示结点位置*/

   while(p&

&(j<

i-1)){

 p=p->next;

++j;

   }     /*寻找第i-1个结点位置*/

   if(!

p||j>

i-1)return NULL;

   /*在l中确定插入位置,p=NULL或j>

i-1时,即插入位置不合法*/

  if(!

(s=(dulinklist)malloc(sizeof(dulnode))))returnNULL;

  /*动态生成新结点失败,则返回错误 */

   s->

data=e;

   /*给新结点的数据域赋值*/

 s->

next=p->

 p->next->prior=s;

   s->prior=p;

  

 p->next=s;

 /*在双向链表中插入新结点时指针的变化 */

   return0;

dulinklistlistdelete_dul(dulinklist &

l,inti,int&e) /*在双向链表l中,删除第i个结点*/

 dulinklist p;

p=l->

next;

/* p指向第一个结点 */

 intj=1;

  /*j表示结点位置 */

 while(p&&(j<

i)){

    p=p->next;

  ++j;

  }   /*寻找第i个结点 */

if(!

i)return NULL;

    /*在l中确定第i个元素的位置指针p,p=NULL,即第i个元素不存在*/

  e=p->

data;

       /*把指针p的数据域的值赋给e*/

  p->

prior->next=p->next;

 p->

next->

prior=p->

prior;

 /*在双向链表中删除结点时指针的变化 */

 free(p);

     /*把结点p删掉*/

return 0;

intlocateelem_dul(dulinklistl,inte) /*查找双线链表中第一个值为e的结点位置*/

   dulinklistp;

intj;

p=l->

next;

    /*p指向第一个结点*/

 j=1;

    /* j表示结点位置*/

 while((p->

=e)&&

p){

  p=p->

  }/*寻找第一个值为e的结点位置*/

p)

return -1;

   /*返回第一个值为e的结点位置*/

 else

return1;

void print_dul(dulinklistl) /*打印双向链表l */

dulinklistp;

 p=l;

    /*p指向头结点*/

 while(p){

  printf("

%d"

p->

data);

  p=p->

next;

 }          /*把双向链表中的数据都打印出来*/

voidsave_dul(dulinklistl)

FILE*fp;

  if((fp=fopen("

H:

\\test2.txt","

w+"))==NULL)

  printf("cannot openfile!

\n"

   exit(0);

while(l)

ﻩ{

ﻩfprintf(fp,"

%d",l->

l =l->

ﻩ}

voidmain(){

dulinklistl;

 inti,e,x;

 intpos;

create_dul(l);

  /*调用双向链表建立函数*/

 print_dul(l);

      /*调用双向链表的打印函数*/

 while

(1){

ﻩprintf("inputxtochoose (1.查找,2.插入,3.删除,4.0ver):

\n"

 scanf("%d"

&x);

ﻩ switch(x){

case1:

ﻩprintf("\npleaseinputthedatayouwanttolocate:

 \n"

scanf("

e);

 /*输入要查找的值*/

ﻩ pos=locateelem_dul(l,e);

  /*调用双向链表的查找函数*/

ﻩ if(pos==-1)printf("The dataisnotfound!

\n"

ﻩﻩelse printf("

Thedataisfound!

\n"

break;

ﻩﻩ

case2:

printf("pleaseinputthe position youwanttoinsert:

\n");

 scanf("

i);

 /*输入要插入的位置*/

  printf("

pleaseinputthedatayouwant toinsert:

scanf("

%d"

,&

e);

/* 输入新结点的数据 */

   listinsert_dul(l,i,e);

  ﻩ/*调用双向链表的插入函数*/

  print_dul(l);

break;

 /* 调用双向链表的打印函数*/

case 3:

  printf("

\n pleaseinputthepositionyouwantto delete:

scanf("

i);

  /*输入要删除结点的位置 */

   listdelete_dul(l,i,e);

/* 调用双向链表的删除函数 */

   print_dul(l);

break;

 /* 调用双向链表的打印函数*/

case4:

 

ﻩﻩ save_dul(l);

ﻩ  exit(0);

ﻩ}ﻩﻩ

} 

●5.程序运行结果

●6.总结:

   通过此次数据结构的课程设计,我对程序的编程,编译,执行等有了更深的认识。

理解到思路对于一个程序的重要性,在整个设计过程中,遇到了很多不同的问题,但通过尝试,努力和老师的帮助最终都解决了,感到很有成就感。

从中,我意识到程序的成功不仅仅是消除语法上的错误,而且还要执行成功。

缺乏完整的思路,尽管语法正确,程序还是无法执行。

数据结构的设计考验的不仅仅是我们对书本知识的理解,还考验了我们分析事物时思维的逻辑紧密性,加深并巩固了我对数据结构的认识。

总的来说,这次的数据结构课程设计加深了我对数据结构的认识,也学到了相关的知识,并且巩固了课堂上所学的知识,还锻炼了实践的应用操作能力,感受颇深,也收获了成功的喜悦。

  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2