data structure
我曾经逢人就说总是遇到这样那样错误无法解决,但是这些问题只要静下心来仔细思考根本没有解决不了的问题。
其实明明,超级超级简单,然而被老师讲的天花乱坠,
栈:
顺序栈 起初base top指针 都指向数组式栈的栈底,增加(删除也同理)在top增加元素 top++(指针的位置和元素值)
链式栈 一个无头结点的单链表,首元结点尾结点分别指向队头和队尾,初始都指向空结点指针,这里无需用top和base表示, 删除是删除首元结点,增加也是在首元结点之前增加结点
队列(循环队列):
顺序队列: 一个首地址是base的数组,然后使用数组下标值rear、front 标记意义上的队列尾Q.base[Q.rear]和队列头Q.base[Q.front]元素
链式队列: 一个带头结点的单链表,两个指针front、rear 初始默认规定指向单链表的头结点和尾结点,删除时删除首元结点,依次删(沿着首元结点指向尾结点的方向),直到连尾结点也删掉了,只剩下首元结点,将尾结点指针和头结点指针共同指到首元结点的位置;插入的时候是插在尾结点之后。
后来我才知道,new delete是c++的,malloc free是c的
#链式
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//初始化、入队、出队取队头元素
status InitQueue(LinkQueue &Q){
Q.front = Q.rear = new QNode;
Q.front->next = NULL;
return ok;
}
status EnQueue(LinkQueue &Q,QElemType &e){
p = new QNode;
p -> data = e;
Q.rear -> next = p;
p -> next =NUll;
Q.rear = p;
return ok;
}
status DeQueue(LinkQueue &Q,QElemtype & e){
p = Q.front -> next;
e = p -> data;
if(Q.rear == Q.front)
return error;
Q.front -> next = p ->next;
if(Q.rear == P)
Q.rear = Q.front;
delete Q;
return ok;
}
QELemType GetHead(LinkQueue &Q){
if(Q.rear != Q.front)
return Q.front-> next->data;}
#顺序
typedef struct{
int front;
int rear;
SElemType *base;
}SqQueue;
//初始化、入队、出队、队列长度、取队头元素
status InitSqQueue(SqQueue &Q){
Q.base = new SElemtype[maxsize];
if(!Q.base)
exit (OVERFLOW);//指针和数组都会分配失败嘛? 指针好像不会呀,所以没有检查分配失败这个步骤?
Q.rear = Q.front = 0;
return ok;
}
status EnQueue(SqQueue &Q,SElemType e){
if(((Q.rear +1)%maxsize)==Q.front)
return error;
Q.base[rear] = e;
Q.rear = (Q.rear +1)%maxsize;
return ok;
}
status DeQueue(SqQueue &Q,SElemType e){
if(Q.rear == Q.front)
return error;
e = Q.base[Q.front];//删除元素的时候记得保存数据
Q.front = (Q.front+1)%maxsize;
return ok;
}
SElemType GetHead(SqQueue &Q){
if(Q.rear != Q.front)
return Q.base[Q.front];//return Q.front;
}
int GetLength(SqQueue &Q){
return (Q.rear -Q.front+maxsize)%maxsize;
}
写java不应该对异常很敏感吗
c++:除非你指定new(std::nothrow)QNode 否则new会抛出异常的 C++的new如果不指定std::nothrow,资源分配失败会抛出错误
c: malloc这个的话,就判断是不是等于0或者NULL
//c\c++\java 创建数据结构的时,定义赋值等什么时候会占内存
4-1 用递归法求数组的最大值 (10分)
#include<stdio.h>
int amax(int a[],int n);
int main(){
int i,max;
int a[] = {1,4,3,6,8,3,5,10,4,7};
max = amax(a,10);
for(i = 0;i<10;i++)
printf("%4d",a[i]);
printf("\nmax=%d\n",max);
return 0;
}
int amax(int a[],int n){
if(0 == n)
return a[0];
else
{
return amax(a+1,n-1)>a[0]?amax(a+1,n-1):a[0];
}}
递归基础
4-3 使用递归函数计算1到n之和 (10分
4-4 递归实现顺序输出整数 (15分)
4-5 递归计算P函数 (15分)

4-6 递归法求Fibonacci数列第n项的值 (10分)
5-1 整数分解为若干项之和 (20分)分解质因数
5-2 输出全排列 (20分)
表 顺序链式
栈 队列
二叉树
- 顺序表的存储结构(数组)
- 顺序表基础操作的实现
- 顺序表的初始化
- 顺序表的取值
- 顺序表的查找
- 顺序表的插入
- 顺序表的删除
typdef struct {
Element *elem;
int length;
}
status InitList(SqList &L){
L.elem = new Element[MAXSIZE];
if(!L.elem) exit(OVERFLOW)
L.length = 0;
return Ok;
}
status GetList(SqList L,ElemType &e,int i){
if(i<1||i>L.length)
return ERROR;
e = L.elem[i-1];1
return OK;
}
status LocalList(SqList L,Element e,int i){
for(i = 0;i<L.length;i++)
if(e == l.elem[i])
return i+1;
return 0;
}
status ListInsert(SqList &L,int i,ElemType e){
if(i<1||(i>L.length+1)) return ERROR;
if(L.length = MAXSIZE)
return ERROR;
for(j=L.length-1;j>=i-1;--j)
L.elem[j+1]=L.elem[j]; //L.elem[j]=L.elem[j-1];思考这里为什么是错的
L.elem[i-1]=e;
return OK;}
status ListDelete(SqList &L,int i){
if((i<1)||(i>L.length))
return ERROR;
for(j = i;j<L.length-1;j++)
L.elem[j-1] = L.elem[j];
--L.length;
return OK;
}
//根据具体事例考究SqList &L SqList L的区别
- 单链表的存储结构(指针)
- 单链表基本操作的实现
- 单链表的初始化
- 单链表的取值
- 单链表的按值查找
- 单链表的插入
- 单链表的删除
- 创建单链表
- 前插法创建单链表
- 后插法创建单链表
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
status InitList(LinkList L,int i,ElemType &e){
L = new LNode;
L->next = Null;
return Ok;
}
status GetElemList(LinkList &L,int n){
p = L->next;
j = 1;
while(p&&j<i){
p=p->next;
++j;
}
if(j>i||!p)
return ERROR;
e = p->data;
return OK;
}
LNode *LocalElem(LinkList L,ElemType e){
p = l->next;
while(p && p ->data ! = e)
p=p->next;
return P;
}
status
建立二叉树的方法_百度搜索
https://www.baidu.com/s?wd=%E5%BB%BA%E7%AB%8B%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%96%B9%E6%B3%95&rsv_spt=1&rsv_iqid=0xfc21a21700008c2a&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=site888_3_pg&rsv_enter=1&oq=%26lt%3BreateBinTree()%7B%7D&inputT=2759&rsv_t=b206a6tiXnWbKNKuN%2BomwwItp81Ea7ptDQJj4B0H9DYZlFnsTMOHBV6ETAvvq51Rg3YD&rsv_pq=9bcbb16000009ce3&rsv_sug3=21&rsv_sug1=15&rsv_sug7=101&bs=CreateBinTree()%7B%7D
求二叉树的树高
#include<stdio.h>
#include<stdlib.h>
typedef struct TNode *BinTree;
typedef char ElemType;
struct TNode{
ElemType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(){
BinTree BT = (BinTree)malloc (sizeof(BT));
BT -> Left = NULL;
BT -> Right = NULL;
return BT;
}
int Max(int a, int b){
return a>b ? a:b;
}
int GetHeight(BinTree BT){
if(BT == NULL)
return 0;
else
return 1 + Max(GetHeight(BT -> Left),GetHeight(BT -> Right));
}
int main(){
BinTree BT = CreatBinTree();
printf("%d\n",GetHeight(BT));
return 0;
}
二叉树的遍历 (中、先、后、层次)

#include<stdio.h>
#include<stdlib.h>
typedef struct TNode *Position;
typedef Position BinTree;
typedef char ElemType;
struct TNode{
ElemType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(){
BinTree BT[9];
int i;
for(i = 0;i<9;i++){
BT[i] = (BinTree)malloc (sizeof(BT));
BT[i] -> Data = (char)(i+65);
BT[0] ->Left = BT[1];
BT[0] ->Right = BT[2];
BT[1] ->Left = BT[3];
BT[1] ->Right = BT[5];
BT[2] ->Left = BT[6];
BT[2] ->Right = BT[8];
BT[3] ->Left = NULL;
BT[3] ->Right = NULL;
BT[4] ->Left =NULL;
BT[4] ->Right = NULL;
BT[5] ->Left = BT[4];
BT[5] ->Right = NULL;
BT[6] ->Left = NULL;
BT[6] ->Right = BT[7];
BT[7] ->Left = NULL;
BT[7] ->Right = NULL;
BT[8] ->Left = NULL;
BT[8] ->Right = NULL;
return BT[0];
}
int main(){
BinTree BT = CreatBinTree();
printf("Inorder:"); InorderTraversal(BT); printf("\n");
printf("Preorder:"); PreorderTraversal(BT); printf("\n");
printf("Postorder:"); PostorderTraversal(BT); printf("\n");
printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");
return 0;
}
void InorderTraversal(BinTree BT){
if(BT){
InorderTraversal(BT->Left);
printf("%c",BT -> Data);
InorderTraversal(BT -> Right);
}
}
void PreorderTraversal(BinTree BT){
if(BT){
printf("%c",BT->Data);
PreorderTravseral(BT -> Left);
PreorderTravseral(BT ->Right);
}}
void PostorderTraversal(BinTree BT){
if(BT){PostorderTravseral(BT ->Left);
PostordrtTravseral(BT =>Right);
printf("%c",BT->Data);
}}
void LevelorderTraversal( BinTree BT ) {
int maxsize = 10;
int front,rear;
BinTree queue[maxsize]; //注意存的是指向结点的指针,而不是结点值;
front = rear = 0;
BinTree temp; //存放临时结点指针;
if(BT != NULL){ //这里必须加if判断,否则PAT编译器老是报段错误,满分25分扣两分 //根结点入队
rear = (rear+1)%maxsize;
queue[rear] = BT; //队不空循环
while(front != rear){
//队结点出队
front = (front+1)%maxsize;//注意队列出队入队,都是一样的:都是先移动指针,再动队元素,与栈不同,要区分
temp = queue[front];
printf(" %c",temp->Data);//出队的结点的左右结点入队
if(temp->Left){
rear = (rear+1)%maxsize;
queue[rear] = temp->Left;
}
if(temp->Right){
rear = (rear+1)%maxsize;
queue[rear] = temp->Right;
}
}
}
}
4-9 二叉树的遍历 (25分)(前、中、后、层次) - happy_bigqiang的博客 - 博客频道 - CSDN.NET
http://blog.csdn.net/happy_bigqiang/article/details/53013989
4-9 二叉树的遍历 (25分) - Ken - 博客频道 - CSDN.NET
http://blog.csdn.net/wanmeiwushang/article/details/51902027
4-3 先序输出叶结点 (15分)
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。
正确代码:

当时做的错误代码:

1.先中后、层次遍历
2.各种数据结构可用的表示方法总结一下
endl是C++标准库中的操控器(Manipulator),包含于<iostream>(<iostream>),命名空间(namespace):std。注意endl(为字母l)而非end1(数字1)。
cout<<" "表示在程序运行时在那个黑框子显示出你" "内的你所键入的内容。而cout<<' '表示在程序运行时在那个黑框子显示出' '内的字符型变量所代表的内容。例如,cout<<"hello world";在黑框子上就会显示hello world,而cout<<‘h';他会输出字符型h,而当单引号里的内容多余一个字符时他就会输出一个数,而不是你键入的内容了。
发现杯大奖赛——往期回顾
http://www.dajiangsai.org/static/previousreviews/previousreviews.html
TMOOC-首页
http://www.tmooc.cn/web/index_new.html?tedu
[JavaScript]爬取京东商城上的商品信息和评论爬虫源码 - 代码贴 - BCCN
http://www.bccn.net/paste/1590/
用代码爬取京东商品_百度搜索
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=site888_3_pg&wd=%E7%94%A8%E4%BB%A3%E7%A0%81%E7%88%AC%E5%8F%96%E4%BA%AC%E4%B8%9C%E5%95%86%E5%93%81&rsv_pq=f1d500f500060e5a&rsv_t=b081cGeMJ6%2Bq5OfhlysUxNjm254fJlz%2FKL7a69CRjsHIQOAxpZyFhJ77NdG1o4geoHSr&rqlang=cn&rsv_enter=1&rsv_sug3=7&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=15220&rsv_sug4=15833
层次遍历二叉树-三种不同的方法 - zzran的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/zzran/article/details/8778021
层次遍历二叉树_百度搜索
https://www.baidu.com/s?wd=%E5%B1%82%E6%AC%A1%E9%81%8D%E5%8E%86%E4%BA%8C%E5%8F%89%E6%A0%91&rsv_spt=1&rsv_iqid=0xe45078b70002dce9&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=site888_3_pg&rsv_enter=1&rsv_sug3=1&rsv_sug1=1&rsv_sug7=001
二叉树的基本操作实现及其应用29
http://3y.uu456.com/bp_6i73l3l2yi3fmdz9vddz_1.html
关于创建二叉树的C语言 为什么void Creat_Bintree(Bintree *root)非要定义一个带指针的?_百度知道
https://zhidao.baidu.com/question/512632206.html
闭包_百度搜索
https://www.baidu.com/s?tn=25017023_1_pg&ch=1&ie=UTF-8&wd=%E9%97%AD%E5%8C%85
4-2 二叉树的遍历 (25分)本题要求给定二叉树的4种遍历。函数接口定义:void Inorde_百度搜索
https://www.baidu.com/s?tn=25017023_1_pg&ch=1&ie=UTF-8&wd=4-2+%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86+(25%E5%88%86)%E6%9C%AC%E9%A2%98%E8%A6%81%E6%B1%82%E7%BB%99%E5%AE%9A%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%844%E7%A7%8D%E9%81%8D%E5%8E%86%E3%80%82%E5%87%BD%E6%95%B0%E6%8E%A5%E5%8F%A3%E5%AE%9A%E4%B9%89%EF%BC%9Avoid+InorderTraversal(+BinTree+BT+)%3Bvoid+
data structure的更多相关文章
- [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 ...
随机推荐
- FileInputstream的available()方法
摘自:http://greemranqq.iteye.com/blog/2051487
- JavaScript的数据类型
JavaScript的数据类型 1.JavaScript的数据类型包括:字符串.数值.布尔.数组.对象.Null.Undefined. 2.JavaScript拥有动态类型,这以为着同一个变量可用作不 ...
- Hibernate体系结构的简单介绍
Hibernate体系结构的简单介绍 1.SessionFactory: 单个数据库映射关系经过编译后的内存镜像,是线程安全的.它是生产Session的工厂,本身需要依赖于ConnectionPeov ...
- 编写一个Car类,具有final类型的属性品牌,具有功能drive; 定义其子类Aodi和Benchi,具有属性:价格、型号;具有功能:变速; 定义主类E,在其main方法中分别创建Aodi和Benchi的对象并测试对象的特 性。
package b; public class Car { public final static Car pinpai=new Car(); public static Car instance() ...
- 编写Music类
package a; public class Instrument { public void play() { System.out.println("弹奏乐器"); } } ...
- BZOJ 2132 圈地计划(最小割)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2132 题意:n*m的格子染色黑白,对于格子(i,j)染黑色则价值为A[i][j],白色为 ...
- 2012 #3 Arcane Numbers
Arcane Numbers 1 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- linux mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- 统计map上的read数量
samtools flagstat /SRA111111/SRR111222/accepted_hits.bam 78406056 + 0 in total (QC-passed reads + QC ...
- tomcat源码导入eclipse步骤
1. 获取源代码 方式一:从官网http://tomcat.apache.org/download-70.cgi 直接下载,官网提供了Binary 和 Source Code两种下载方式,要研究tom ...