data structure test
1、设计算法,对带头结点的单链表实现就地逆置。并给出单链表的存储结构(数据类型)的定义。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
using namespace std; typedef char ElemType; typedef struct Node{
ElemType data;
struct Node *next;
}Node, *LinkList; LinkList CreateList()
{
LinkList L;
ElemType c;
L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
Node *p , *tail;
tail = L;
c = getchar();
while(c != '#')
{
p = (Node *)malloc(sizeof(Node));
p->data = c;
tail->next = p;
tail = p;
c = getchar();
}
tail->next = NULL;
return L;
} void ShowList(LinkList L)
{
Node *p;
p = L->next;
while(p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
} void ReverseList(LinkList L)
{
Node *p, *q;
p = L->next;
L->next = NULL;
while(p != NULL)
{
q = p->next;
p->next = L->next;
L->next = p;
p = q;
} } int main()
{
LinkList L;
L = CreateList();
ShowList(L); ReverseList(L);
ShowList(L);
return 0;
}
2、编写递归算法,将二叉树中所有结点的左、右子树相互交换。并给出算法中使用的二叉树的存储结构(数据类型)的定义。
typedef struct BiNode
{
char data;
struct BiNode *left;
struct BiNode *right;
}BiNode, *BiTree;
BiNode* Exchange(BiNode* T)
{
BiNode* p;
if(NULL==T || (NULL==T->lchild && NULL==T->rchild))
return T;
p = T->lchild;
T->lchild = T->rchild;
T->rchild = p;
if(T->lchild)
{
T->lchild = Exchange(T->lchild);
}
if(T->rchild)
{
T->rchild = Exchange(T->rchild);
}
return T;
}
3、折半查找算法。
#include<iostream>
#include<cstdio>
using namespace std;
int search(int *array, int n, int target)
{
int low = 0;
int high = n - 1;
if( low > high ) return -1;
while( low <= high )
{
int mid = low + ( high - low ) / 2;
if( array[mid] < target ) low = mid + 1;
else if( array[mid] > target ) high = mid - 1;
else return mid;
}
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9};
cout<<search(a,9,4)<<endl;
return 0;
}
4、数据结构课本P74,习题2、13
void DeleteNode( ListNode *s)
{//删除单循环链表中指定结点的直接前趋结点
ListNode *p, *q;
p=s;
while( p->next->next!=s)
p=p->next;
//删除结点
q=p->next;
p->next=q->next;
free(p); //释放空间
}
5、统计叶子结点数。P168
#include<iostream>
#include<queue>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef struct BiNode
{
char data;
struct BiNode *left;
struct BiNode *right;
}BiNode, *BiTree;
int sum = 0;
void CreateBinaryTree(BiTree &T)//二叉树建立 abc,,de,g,,f,,,
{
//T = (BiNode*) malloc (sizeof(BiNode));
T = new BiNode;
cin >> T->data;
if(T->data == ',')
{
T = NULL;
}
if(T != NULL)
{
CreateBinaryTree(T->left);
CreateBinaryTree(T->right);
}
}
void PreOrder(BiTree T)//前序遍历
{
if(T != NULL)
{
cout << T->data;
PreOrder(T->left);
PreOrder(T->right);
}
}
void InOrder(BiTree T)//中序遍历
{
if(T != NULL)
{
InOrder(T->left);
cout << T->data;
InOrder(T->right);
}
}
void PostOrder(BiTree T)//后序遍历
{
if(T != NULL)
{
PostOrder(T->left);
PostOrder(T->right);
cout << T->data;
}
}
void LevOrder(BiTree T)//层次遍历
{
if(T != NULL)
{
BiTree p = T;
queue<BiTree>que;
que.push(p);
while(!que.empty())
{
p = que.front();
cout << p->data;
que.pop();
if(p->left != NULL)
{
que.push(p->left);
}
if(p->right != NULL)
{
que.push(p->right);
}
}
}
}
int Size(BiTree T)//计算二叉树节点数
{
if(T != NULL)
{
if(T->left == NULL && T->right == NULL)
{
sum++;
}
Size(T->left);
Size(T->right);
}
return sum;
}
int Deep(BiTree T)//计算二叉树深度
{
int m, n;
if(T == NULL) return 0;
m = Deep(T->left);
n = Deep(T->right);
if(m > n) return m + 1;
else return n + 1;
}
int main(void)
{
BiTree T;
CreateBinaryTree(T); cout << "前序遍历结果为:" << endl;
PreOrder(T);
cout << endl << endl; cout << "中序遍历结果为:" << endl;
InOrder(T);
cout << endl << endl; cout << "后序遍历结果为:" << endl;
PostOrder(T);
cout << endl << endl; cout<<"层次遍历结果为:"<<endl;
LevOrder(T);
cout << endl << endl; cout << "二叉树叶节点个数为:" << Size(T)<<endl;
cout << "二叉树深度数为:" << Deep(T) << endl;
system("pause");
return 0;
}
6、顺序表的合并。
#define MAXSIZE 100
typedef int ElemType; typedef struct SeqList
{
ElemType elem[MAXSIZE];
int last;
}SeqList;
void mergeList(SeqList *LA, SeqList * LB, SeqList *LC)
{
int i, j, k;
i = j = k = 0;
while (i <= LA->last && j <= LB->last)
{
if (LA->elem[i] <= LB->elem[j])
{
LC->elem[k++] = LA->elem[i++];
}
else
{
LC->elem[k++] = LB->elem[i++];
}
}
while (i <= LA->last)
{
LC->elem[k++] = LA->elem[i++];
}
while (j <= LB->last)
{
LC->elem[k++] = LB->elem[j++];
}
LC->last = LA->last + LB->last + 1;
}
data structure test的更多相关文章
- [LeetCode] All O`one Data Structure 全O(1)的数据结构
Implement a data structure supporting the following operations: Inc(Key) - Inserts a new key with va ...
- [LeetCode] Add and Search Word - Data structure design 添加和查找单词-数据结构设计
Design a data structure that supports the following two operations: void addWord(word) bool search(w ...
- [LeetCode] Two Sum III - Data structure design 两数之和之三 - 数据结构设计
Design and implement a TwoSum class. It should support the following operations:add and find. add - ...
- Finger Trees: A Simple General-purpose Data Structure
http://staff.city.ac.uk/~ross/papers/FingerTree.html Summary We present 2-3 finger trees, a function ...
- Mesh Data Structure in OpenCascade
Mesh Data Structure in OpenCascade eryar@163.com 摘要Abstract:本文对网格数据结构作简要介绍,并结合使用OpenCascade中的数据结构,将网 ...
- ✡ leetcode 170. Two Sum III - Data structure design 设计two sum模式 --------- java
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
- leetcode Add and Search Word - Data structure design
我要在这里装个逼啦 class WordDictionary(object): def __init__(self): """ initialize your data ...
- Java for LeetCode 211 Add and Search Word - Data structure design
Design a data structure that supports the following two operations: void addWord(word)bool search(wo ...
- HDU5739 Fantasia(点双连通分量 + Block Forest Data Structure)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5739 Description Professor Zhang has an undirect ...
- LeetCode Two Sum III - Data structure design
原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...
随机推荐
- java poi ppt 接口的基本操作
依赖 在 pom.xml中增加以下依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId& ...
- CentOS防火墙iptables使用
1.1 企业安全优化配置原则 尽可能不给服务器配置外网ip ,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务高并发的情况,不能开iptables,会影响性能,利用 ...
- 机器学习之路--seaborn
seaborn是基于plt的封装好的库.有很强的作图功能. 1.布局风格设置(图形的style)and 细节设置 用matplotlib作图: import numpy as np import ma ...
- 亲测有效!CLion2019.2的安装及汉化
CLion的安装.汉化 今天小杨写C语言时,发现这个软件(DEV-C++)太麻烦了,于是就在网上找了一下,发现了两个不错的软件,一个是VC++,另一个是Clion.比较亲于占用内存小的我,选择了后者, ...
- 前端面试基础回顾之深入JS继承
前言 对于灵活的js而言,继承相比于java等语言,继承实现方式可谓百花齐放.方式的多样就意味着知识点繁多,当然也是面试时绕不开的点.撇开ES6 class不谈,传统的继承方式你知道几种?每种实现原理 ...
- swiper如何禁止用户滑动
禁止用户滑动,只需要在最外层添加class “swiper-no-swiping” <div class="swiper-container swiper-no-swiping&qu ...
- windows服务搭建(VS2019创建Windows服务不显示安装组件)
1.创建windows服务应用 2.右键查看代码 3.写个计时器Timer using System.Timers; 如上图,按tab键快速操作 会自动创建一个委托 改为下边的方式,打印日志来记录 ...
- Flutter全面屏适配
笔者在这篇文章ReactNative全面屏(Android)适配问题提及了现在的全面屏问题,不仅是Android平台,IOS平台也是,给我的感觉就是手机越来越长了. 现在的手机长宽比早就不是之前的16 ...
- playbooks框架部署远程主机
进入到ansible和python环境 进入python3.6虚拟环境 #su - deploy #source .py3-a2.5-env/bin/activate 加载ansible 2.5版本 ...
- Linux中两个重要的基础服务
本文服务器基于centos7,客户端Windows10 FTP FTP(File Transfer Protocol),文件传输协议,是一个比较古老的基于TCP,用于不同计算机间传递文件的协议. 安装 ...