几种常见的数据结构实现源码

上传人:m**** 文档编号:488208029 上传时间:2022-10-10 格式:DOC 页数:54 大小:300.50KB
返回 下载 相关 举报
几种常见的数据结构实现源码_第1页
第1页 / 共54页
几种常见的数据结构实现源码_第2页
第2页 / 共54页
几种常见的数据结构实现源码_第3页
第3页 / 共54页
几种常见的数据结构实现源码_第4页
第4页 / 共54页
几种常见的数据结构实现源码_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《几种常见的数据结构实现源码》由会员分享,可在线阅读,更多相关《几种常见的数据结构实现源码(54页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! 数据结构郑海树一单链表11链表的输入、输出和删除以及求链表的长度12链表逆序33链表合并54从a链表中删去与b链表中有相同学号的那些结点75如果链表中的年龄与输入的年龄相等,则将该结点删去86链表排序117遍历一次求链表的中间结点128判断一个单链表是否有环(不能用标志位,最多只能用两个额外指针)139用链表输出三个学生的数据1510链表实现建立,输出,删除,插入的操作1611键盘输入10个整数,生成一个链表,按顺序输出链表中的结点的数值。然后输入一个待查找整数,找到则删除该整数所在的结点(多次出现则全部删除),然后输出删除结点以后的链表,在程序

2、结束之前清空链表20二双链表221双链表的建立、删除、插入和输出22三环状链表(约瑟夫环)261十三个人围成一个圈,从第一个人开始顺序报号1、2、3。凡是报到“3”者退出圈子,请找出最后留在圈子中的人原来的序号26215个美国人和15个日本人围坐一圈,从其中一人开始数数,从1数到9,数到9的人踢出去,设计代码使被踢出的人都是日本人,输出日本人坐的位置283已知n个人(以编号1,2,3.n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列29四树331建立二叉树332二叉树根结点为

3、root,用递归法把二叉树的叶子结点按从左到右的顺序连成一个单链表333写一个求二叉树深度的算法344在已排序的二叉树中插入一个节点345建立排序二叉树并中序遍历35五堆、栈、队列371入栈出栈372入队出队383用栈、队列和类设计一个程序,检查所输入的数据是不是回文数据,这串数据以点作为结束符404队列测长425队列打印436用两个队列实现一个栈的功能43六排序451冒泡法排序452选择法排序463 快速排序474直接插入排序函数模板485直接选择排序函数模板496起泡排序函数模板507顺序查找函数模板518折半查找函数模板51 / 一单链表1链表的输入、输出和删除以及求链表的长度#incl

4、udeusing namespace std;typedef struct studentint data;struct student *next;node;/ 建立链表void create(node *&head) /为什么参数是*&?node *p1,*p2;head=NULL;int n;coutn;while(n0)p1=(node *)malloc(sizeof(node);p1-data=n;p1-next=NULL;if(NULL=head) /将head, p1, p2都指向头结点head=p1;p2=head;elsep2-next=p1;p2=p1;cinn;/ 求链表

5、长度int len(node *h)int i=0;while(h!=NULL)i+;h=h-next;return i;/ 删除结点void del(node *h,int i)node *p,*q; p=h;if(ilen(h)return;else if(i=1) /删除第1个结点h=h-next;free(p);else /删除其它结点while(i-2) p=p-next; /如果要删除第2个结点,则这一步省略q=p-next;p-next=q-next;free(q); /删除*q结点/ 输出链表void disp(node *h)cout输出链表: ;while(h!=NULL)

6、coutdatanext;coutendl;void main()node *head;int i;create(head);disp(head);cout链表长度: len(head)endl;couti;del(head,i);disp(head);2链表逆序#include using namespace std;struct nodeintdata;node*next;typedef struct node Node;Node* ReverseList(Node *head)if(!head | !head-next)return head;Node *p1 = head;Node *

7、p2 = p1-next;head-next = NULL;while(p2)p1 = p2;p2 = p2-next;p1-next = head;head = p1;return head;Node *RecReverseList(Node *head)if(!head | !head-next)return head;Node *newhead = RecReverseList(head-next);head-next-next = head;head-next = NULL;return newhead;int main (int argc, char * const argv) No

8、de a,b,c;a.data = 1, a.next = &b;b.data = 2, b.next = &c;c.data = 3, c.next = NULL;Node *tmp = &a;while(tmp)cout datanext;cout endl;tmp = RecReverseList(&a);while(tmp)cout datanext;cout datadata)head=head1;p1=head1-next;p2=head2;elsehead=head2;p2=head2-next;p1=head1;Node *pcurrent=head;while(p1!=NUL

9、L&p2!=NULL)if(p1-datadata)pcurrent-next=p1;pcurrent=p1;p1=p1-next;elsepcurrent-next=p2;pcurrent=p2;p2=p2-next;/ 剩余结点if(p1!=NULL)pcurrent-next=p1;if(p2!=NULL)pcurrent-next=p2 ;return head ; (2)已知两个链表head1 和head2 各自有序,请用递归方法把它们合并成一个有序链表。 (Autodesk)Node *MergeRecursive(Node *head1,Node *head2)if(head1=

10、NULL)return head2;if(head2=NULL)return head1;Node *head=NULL;if(head1-datadata)head=head1;head-next=MergeRecursive(head1-next,head2);elsehead=head2;head-next=MergeRecursive(head1,head2-next);return head;4从a链表中删去与b链表中有相同学号的那些结点#include#include#define LA 4#define LB 5#define NULL 0struct studentchar num6;char name8;struct student *next;aLA,bLB;void main()struct student aLA=101,Wang,102,Li,105,Zhang,106,Wei;struct student bLB=103,Zhang,104,Ma,105,Chen,107,Guo,108,Lu;int i;struct student *p,*p1,*p2,*head1,*head2;/*初始化*/head1=a;head2=b;printf(List a:n);for(p1=head1,i=1;p1a+LA;i+)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号