欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年数据结构链表操作 .pdf

    • 资源ID:33370475       资源大小:62.75KB        全文页数:10页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年数据结构链表操作 .pdf

    /* * 数据结构链表等操作 * */#include #include usingnamespace std; /* 单链表节点结构*/typedef struct NodeType char elem; NodeType *next; Node; /* 双链表节点结构*/typedef struct DNodeType char elem; DNodeType *next; DNodeType *prev; DNode; /*=*/* 创建链表*/Node * CreateList(Node *head) if (NULL = head)/ 分配头节点空间 head=(Node*)malloc(sizeof(Node), head-next=NULL; Node *current=head , *temp; char ch; while( 1) coutch; if ( # = ch) /*# 结束输入 */名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - break; temp=(Node *) malloc ( sizeof(Node) ); temp-elem=ch; temp-next=NULL; current-next=temp; /* 当前节点的后驱指向新节点*/ current=temp; /* 当前节点为链表尾节点*/ return head; /*=*/* 输出链表*/void PrintList(Node *head) Node * current=head-next; coutelem) coutsetw(5)elem; current=current-next; coutnext; /* 当前节点 */ Node *prev=head; /* 前驱节点 */名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - Node *temp; /* 过渡节点 */while(current) /* 移动至尾节点*/ prev=current; current=current-next; temp=(Node*) malloc( sizeof(Node) ); temp-elem=elem; temp-next=NULL; prev-next=temp; /* 尾节点的后驱指向新节点*/return head; /*=*/* 删除节点 */Node *DeleteNode(Node *head,char elem) if (NULL = head | NULL = elem) return head; if (NULL = head-next) return head; Node *prev,*current; prev=head; current=head-next; while(current) if (current-elem = elem) /* 匹配节点元素*/ prev-next=current-next; /* 前驱节点的后驱指向当前节点的下一个节点 */ free(current); /* 释放当前节点*/return head; prev=current; current=current-next; /* 移动至下一个节点*/名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - return head; /*=*/* 单链表逆置 */Node *ReverseList(Node *head) if (NULL = head) return head; if (NULL = head-next) return head; if (NULL = head-next-next) return head; Node *curr=head-next; /* 当前节点 */ head-next=NULL; Node *temp; while(curr) temp=curr-next; /* 暂存下一个节点*/* 把当前节点插入到head 节点后 */ curr-next=head-next; head-next=curr; curr=temp; /* 移动至下一个节点*/ return head; /*=*/* 求中间节点 */Node * MiddleNode(Node *head) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - if (NULL = head) return head; if (NULL = head-next) return head-next; Node *p1,*p2; p1=head; p2=head; while(p2-next) /*p2节点移动2 个节点位置 */ p2=p2-next; if (p2-next) /* 判断p2 后驱节点是否存在,存在则再移动一次 */ p2=p2-next; /*p1节点移动1 个节点位置 */ p1=p1-next; return p1; /*=*/* 合并有序单链表*/Node * MergeList(Node * h1,Node * h2) if (NULL = h1 | NULL = h2) return h1; if (NULL = h1-next ) return h2; if (NULL = h2-next) return h1; Node * curr1,*curr2,*prev1,*temp; prev1=h1; /* 链表 1 的前驱节点 */ curr1=h1-next; /* 链表 1 的当前节点 */ curr2=h2-next; /* 链表 2 的当前节点 */名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - temp=h2; while(curr2) while(curr1 & curr1-elem elem)/* 链表 1 指针移动至大或等于链表2 当前元素的位置*/ prev1=curr1,curr1=curr1-next; /* 在链表 1 中插入链表2 的当前元素 */ temp=curr2-next;/* 暂存链表2 的下一个节点*/ prev1-next=curr2; curr2-next=curr1; /* 链表 1 移动至新节点*/ curr1=curr2; /* 链表 2 移动至下一个节点*/ curr2=temp; return h1; /*=*/* 创建双链表 */DNode * DoubleList(DNode *head) if (NULL = head)/ 分配头节点空间 head=(DNode*)malloc(sizeof(DNode) , head-prev=NULL , head-next=NULL; DNode *current=head , *temp; char ch; while( 1) coutch; if ( # = ch) /*# 结束输入 */break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - temp=(DNode *) malloc ( sizeof(DNode) ); temp-elem=ch; temp-next=NULL; current-next=temp; /* 当前节点的后驱指向新节点*/ temp-prev=current; /* 新节点的前驱指向当前节点*/ current=temp; /* 当前节点为链表尾节点*/ return head; /*=*/* 输出双链表 */void PrintDoubleList(DNode *head) if (NULL = head) return; DNode * p; p=head; coutnext) p=p-next; if (p-elem) coutsetw(5)elem; coutprev) if (p-elem) coutsetw(5)elem; p=p-prev; /*=名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - =*/* 创建循环链表 */Node* CycleList(Node *head) if (NULL = head)/* 分配头节点空间*/ head=(Node*)malloc(sizeof(Node),head-next=NULL; Node *current=head , *temp; char ch; while( 1) coutch; if ( # = ch) /*# 结束输入 */break; temp=(Node *) malloc ( sizeof(Node) ); temp-elem=ch; temp-next=NULL; current-next=temp; /* 当前节点的后驱指向新节点*/ current=temp; /* 当前节点为链表尾节点*/ current-next=head; /* 尾节点指向头节点*/return head; /*=*/* 判断链表是否有环( 循环链表 )*/bool IsCycleList(Node *head) if (NULL= head) returnfalse; if (NULL = head-next) returnfalse; Node *current=head-next; while(current) if (head = current-next) returntrue; current=current-next; returnfalse; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - int main() Node * head,*p; Node * head2,*head3; DNode * dHead; char ch; head = NULL; head2=NULL; head3=NULL; dHead=NULL; /head=(Node*) malloc ( sizeof( Node) ); /head-next = NULL; /创建单链表 head=CreateList(head); PrintList(head); head2=CreateList(head2); PrintList(head2); / 插入节点 coutch; InsertNode(head,ch); PrintList(head); / 删除节点 coutch; DeleteNode(head,ch); PrintList(head); / 单链表逆置 head=ReverseList(head); coutn Reversed !; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - PrintList(head); / 求中间节点 p=MiddleNode(head); coutn Middle Node is:; coutelemendl; / 合并有序单链表 MergeList(head,head2); coutn Merged!; PrintList(head); / 创建双链表 dHead=DoubleList(dHead); PrintDoubleList(dHead); /* 创建循环链表并判断是否有环*/ head3=CycleList(head3); coutIsCycleList(head3); return0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -

    注意事项

    本文(2022年数据结构链表操作 .pdf)为本站会员(H****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开