转载请注明出处: 我所遇见的世界会更美好

我曾经逢人就说总是遇到这样那样错误无法解决,但是这些问题只要静下心来仔细思考根本没有解决不了的问题。

其实明明,超级超级简单,然而被老师讲的天花乱坠,

栈:

顺序栈 起初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分)

表  顺序链式

栈 队列

二叉树

  1. 顺序表的存储结构(数组)
  2. 顺序表基础操作的实现
  •   顺序表的初始化
  •   顺序表的取值
  •   顺序表的查找
  •   顺序表的插入
  •   顺序表的删除

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的区别

  1. 单链表的存储结构(指针)
  2. 单链表基本操作的实现
  •   单链表的初始化
  •   单链表的取值
  •   单链表的按值查找
  •   单链表的插入
  •   单链表的删除
  •   创建单链表
  •   前插法创建单链表
  •   后插法创建单链表

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)。

endl英语意思是end of line,即一行输出结束,然后输出下一行。[1] 
"\n"是C语言风格的换行,C++具有这个是为了兼容C语言。2、endl是标准的C++风格的换行。
 
在语句cout<<'A'中,cout是对象名,cout实在iostream文件中定义的全局对象,#include<iostream>能生成此对象,便可直接引用
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的更多相关文章

  1. [LeetCode] All O`one Data Structure 全O(1)的数据结构

    Implement a data structure supporting the following operations: Inc(Key) - Inserts a new key with va ...

  2. [LeetCode] Add and Search Word - Data structure design 添加和查找单词-数据结构设计

    Design a data structure that supports the following two operations: void addWord(word) bool search(w ...

  3. [LeetCode] Two Sum III - Data structure design 两数之和之三 - 数据结构设计

    Design and implement a TwoSum class. It should support the following operations:add and find. add - ...

  4. 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 ...

  5. Mesh Data Structure in OpenCascade

    Mesh Data Structure in OpenCascade eryar@163.com 摘要Abstract:本文对网格数据结构作简要介绍,并结合使用OpenCascade中的数据结构,将网 ...

  6. ✡ 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 - ...

  7. leetcode Add and Search Word - Data structure design

    我要在这里装个逼啦 class WordDictionary(object): def __init__(self): """ initialize your data ...

  8. 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 ...

  9. HDU5739 Fantasia(点双连通分量 + Block Forest Data Structure)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5739 Description Professor Zhang has an undirect ...

  10. LeetCode Two Sum III - Data structure design

    原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...

随机推荐

  1. zookeeper系列之四—coordinate

    http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html

  2. java配置问题

    先安装jdk.然后这样设置:**********************全为系统变量**************************变量名:JAVA_HOME变量值:D:\Program File ...

  3. 【leetcode❤python】 19. Remove Nth Node From End of List

    #-*- coding: UTF-8 -*-#双指针思想,两个指针相隔n-1,每次两个指针向后一步,当后面一个指针没有后继了,前面一个指针的后继就是要删除的节点# Definition for sin ...

  4. HDU 5046 Airport(dlx)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意:n个城市修建m个机场,使得每个城市到最近进场的最大值最小. 思路:二分+dlx搜索判定. ...

  5. 关于CAShapeLayer的一些实用案例和技巧

    一.使用CAShapeLayer实现复杂的View的遮罩效果 1.1.案例演示 最近在整理一个聊天的项目的时候,发送图片的时候,会有一个三角的指向效果,指向这张图片的发送者.服务端返回给我们的图片只是 ...

  6. LINUX DIFF命令详解

    刚才在和公司做离线IP对比,最后手工了,感觉还是比较麻烦的,遇到数据很大的时候不能手工进行了 本想用linux下的DIFF来进行对比,发现结果很乱.时间很紧最后还是手工了. 现在忙完要认认真真学习一下 ...

  7. 屏幕序列Screen Sequences

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. POJ 3669 Meteor Shower(流星雨)

    POJ 3669 Meteor Shower(流星雨) Time Limit: 1000MS    Memory Limit: 65536K Description 题目描述 Bessie hears ...

  9. CSS笔记(十三)CSS3之过渡

    参考:http://www.w3school.com.cn/css3/css3_transition.asp 通过 CSS3,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元 ...

  10. Phantomjs 在cmd命令行显示中文乱码

    cmd命令行窗口显示中文乱码 cmd中文支持gbk编码 在js执行文件中加上(一般在最开始加) phantom.outputEncoding="gbk"; 这样乱码就正确了