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

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

数据结构

郑海树

一单链表 (1)

1链表的输入、输出和删除以及求链表的长度 (1)

2链表逆序 (3)

3链表合并 (5)

4从A链表中删去与B链表中有相同学号的那些结点 (7)

5如果链表中的年龄与输入的年龄相等,则将该结点删去 (8)

6链表排序 (11)

7遍历一次求链表的中间结点 (12)

8判断一个单链表是否有环(不能用标志位,最多只能用两个额外指针) (13)

9用链表输出三个学生的数据 (15)

10链表实现建立,输出,删除,插入的操作 (16)

11键盘输入10个整数,生成一个链表,按顺序输出链表中的结点的数值。然后输入一个待查找整数,找到则删除该整数所在的结点(多次出现则全部删除),然后输出删除结点以后的链表,在程序结束之前清空链表 (20)

二双链表 (22)

1双链表的建立、删除、插入和输出 (22)

三环状链表(约瑟夫环) (26)

1十三个人围成一个圈,从第一个人开始顺序报号1、2、3。凡是报到“3”者退出圈子,请找出最后留在圈子中的人原来的序号 (26)

215个美国人和15个日本人围坐一圈,从其中一人开始数数,从1数到9,数到9的人踢出去,设计代码使被踢出的人都是日本人,输出日本人坐的位置 (28)

3已知N个人(以编号1,2,3...N分别表示)围坐在一张圆桌周围。从编号为K的人开始报数,数到M的那个人出列;他的下一个人又从1开始报数,数到M的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列. (29)

四树 (33)

1建立二叉树 (33)

2二叉树根结点为ROOT,用递归法把二叉树的叶子结点按从左到右的顺序连成一个单链表 (33)

3写一个求二叉树深度的算法 (34)

4在已排序的二叉树中插入一个节点 (34)

5建立排序二叉树并中序遍历 (35)

五堆、栈、队列 (37)

1入栈出栈 (37)

2入队出队 (38)

3用栈、队列和类设计一个程序,检查所输入的数据是不是回文数据,这串数据以点作为结束符 (40)

4队列测长 (42)

5队列打印 (43)

6用两个队列实现一个栈的功能 (43)

六排序 (45)

1冒泡法排序 (45)

2选择法排序 (46)

3快速排序 (47)

4直接插入排序函数模板 (48)

5直接选择排序函数模板 (49)

6起泡排序函数模板 (50)

7顺序查找函数模板 (51)

8折半查找函数模板 (51)

一单链表

1链表的输入、输出和删除以及求链表的长度

#include

using namespace std;

typedef struct student

{

int data;

struct student *next;

}node;

// 建立链表

void create(node *&head) //为什么参数是"*&"?

{

node *p1,*p2;

head=NULL;

int n;

cout<<"输入数序(以负数或0结束): ";

cin>>n;

while(n>0)

{

p1=(node *)malloc(sizeof(node));

p1->data=n;

p1->next=NULL;

if(NULL==head) //将head, p1, p2都指向头结点

{

head=p1;

p2=head;

}

else

{

p2->next=p1;

p2=p1;

}

cin>>n;

}

}

// 求链表长度

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(i<1||i>len(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)

{

cout<data<<" ";

h=h->next;

}

cout<

}

void main()

{

node *head;

int i;

create(head);

disp(head);

cout<<"链表长度: "<

cout<<"删除第几个结点: ";

cin>>i;

del(head,i);

disp(head);

}

2链表逆序

#include

using namespace std;

struct node

{

int data;

node *next;

};

typedef struct node Node;

Node* ReverseList(Node *head)

{

if(!head || !head->next)

{

return head;

}

Node *p1 = head;

相关文档
最新文档