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 ...
随机推荐
- Cheatsheet: 2014 04.01 ~ 04.30
Java 115 Java Interview Questions and Answers – The ULTIMATE List 3 Good Reasons to Avoid Arrays in ...
- 注册dll失败
注册DLL的时候一出现错误: win8下: (右键弹出) 如果再不行, 64位系统下,把DLL移动到C:\Windows\SysWOW64下 更改路径
- Change Or Set Report Object Property At Run Time In Oracle Forms Using Set_Report_Object_Property Command
Sets the Report object property at run time in Oracle Forms of an report object. The following are t ...
- hashcat
作者: 官网:https://hashcat.net/oclhashcat/ 功能:hash破解
- 如何在VirtualBox虚拟机软件上安装Win7虚拟系统
在Windows系统中安装VirtualBox 双击从官网上下载的VirtualBox-4.3.12-93733-Win.exe安装程序,默认下一步,下一步完成基础安装. 在VirtualBox虚拟机 ...
- Javascript Object Layout
- iOS - File Archive/UnArchive 文件压缩/解压
1.ZipArchive 方式 ZipArchive 只能对 zip 类文件进行压缩和解压缩 GitHub 网址:https://github.com/ZipArchive/ZipArchive Zi ...
- 内部使用final参数的原因
局部内部类(即:定义在方法中的内部类),访问方法中的局部变量 : 局部变量的生命周期与对象的生命周期的不一致性!方法在执行完方法的局部变量就消失,而内部类如果有引用还是存在的,那么将找不到变量.此时设 ...
- equals()和hashcode()
默认调用的情况: 1.集合在存放对象时,首先判断hashcode(),再判断equals如果都是true,认为是相同的两个元素不进行存储. 删除对象时,将从hashcode指定位置查找再删除 2.在h ...
- alloc && afree
#define ALLOCSIZE 10000 static char allocbuf[ALLOCSIZE]; static char *allocp = allocbuf; char *alloc ...