1.指针所占用的空间是固定的

2.void *malloc(sizeof(int)); (这玩意耗时间,老师说通过内存池解决)

  free(p);free(p);   两次free()报错,正确的做法:

  if(p!=NULL){free(p);p=NULL;}

3.传值与传址的理解应转换为是否对其空间进行操作

4.函数指针:

  作用:ex: 不同厂商设备函数不同,操作系统定义设备抽象 device结构体 实现函数跳转

  通用形式: 返回类型 (* 函数指针变量)(形参列表)
  只能指向………………

  而指针函数 :返回值为指针类型

  

 #include<stdio.h>
void fun1(int *a)
{
int i;
for(i=;i<;i++)
printf("%d\n",a[i]);
}
void fun2(int *a)
{
int i;
for(i=;i<;i++)
printf("%d\n",*a[i]);
}
void fun3(int *a,void (*f)(int *))
{
f(a);
}
int main()
{
int a[]={,,,,,,,,,};
// fun1(a);
// fun2(a);
fun3(a,fun1);
fun3(a,fun2);
return ;
}

5.数组与指针  (为何*(*(a+2)+1)有效)

int data[3][4]   data的type为int (*)[4]  *data的type为int*  data[1]的type为 int *

data++   data=data+1*sizeof(int)//wrong

int *p;
p=data;
for(;p<data+12;p++)
{
printf("%d",*p);
}

void fun(int a[][5])
b[5]/b[]
void fun(int *a,int m,int n)
{
}//a[i][j]______________*(a+i*sizeof(n)+j)
main()
{
int data[3][3]={};
fun(data);
}

参考链接:http://blog.sina.com.cn/s/blog_6b1695860100q84k.html   http://blog.sina.com.cn/s/blog_5c6f793801019t3t.html

6.单向链表相关(by myself)

 #include<stdio.h>
#include<stdlib.h> typedef struct node
{
int data;
struct node *next;
}Node; Node *Creat_link(Node*,int *,int);
void Display(Node*);
Node *FindPre(Node*,int);
void Deleteone(Node*,int);
void Deletemore(Node*,int);
void Freeroom(Node*);
Node *Reserve(Node*);
void Addnode(Node*,int);
Node *Combine(Node*,Node*);
int main()
{
Node *head=NULL;
Node *head2=NULL;
Node *head3=NULL;
int a[]={,,,,,};
int b[]={,,,};
head=Creat_link(head,a,);
// head2=Creat_link(head2,b,4);
// head3=Combine(head,head2);//合并
// Display(head3);
// Deleteone(head,a[1]);//删除一个
// Display(head);
// Deletemore(head,a[2]);//可删除重复
// Display(head);
// Addnode(head,5);//增加一个节点
// Display(head);
Reserve(head);//倒序
Display(head);
Freeroom(head);
return ;
} Node *Creat_link(Node *h,int *a,int n)
{
int i;
h=(Node *)malloc(sizeof(Node)); if(h==NULL)
{printf("Not enough memory\n");} h->next=NULL;
Node *s=h;
Node *p=NULL;
for (i=n;i>;i--)
{
p=(Node *)malloc(sizeof(Node));
p->next=h->next;
h->next=p;
p->data=a[i-];
}
return h;
} void Display(Node *h)
{
Node *p=NULL;
p=h;
while(p->next!=NULL)
{
p=p->next;
printf("%d ",p->data);
}
putchar('\n');
}
void Freeroom(Node *h)
{
Node *p=h->next;
Node *tem=NULL;
h->next=NULL;
while(p!=NULL)
{
tem=p->next;
if(tem!=NULL)
{
free(tem);
tem=NULL;
}
p=tem;
}
} Node *Reserve(Node *h)
{
Node *p=NULL;
Node *pnext=NULL;
Node *q=NULL;
if(h==NULL||h->next==NULL)
return h;
p=h->next;
pnext=p->next;
p->next=NULL;
while(pnext!=NULL)
{
q=pnext->next;
pnext->next=p;
p=pnext;
pnext=q;
}
h->next=p;
return h;
}
Node *FindPre(Node *h,int n)
{
Node *p=h;
while(p->next!=NULL&&p->next->data!=n)
p=p->next;
return p;
}
void Deleteone(Node *h,int n)
{
Node *p=FindPre(h,n);
Node *temp=NULL;
if(p->next!=NULL)
{
temp=p->next;
p->next=temp->next;
if(temp!=NULL){
free(temp);
temp=NULL;
} }
else
{printf("Not find!\n");}
} void Deletemore(Node *h,int n)
{
Node *p=FindPre(h,n);
Node *q=p->next;
Node *temp=NULL;
while(q->next!=NULL&&q->next->data==n)
{
temp=q;
q=q->next;
if(temp==NULL){
free(temp);
temp=NULL;}
}
p->next=q->next;
if(q!=NULL){
free(q);
q=NULL;
}
} void Addnode(Node *h,int data)
{
Node *p=h;
Node *new=(Node *)malloc(sizeof(Node));
while(p->next!=NULL&&data>p->next->data)
{p=p->next;}
if(p->next==NULL)
{
p->next=new;
new->next=NULL;
}
else
{
new->next=p->next;
p->next=new;
}
new->data=data;
} Node *Combine(Node *h1,Node *h2)
{
Node *p=h1;
Node *q=h2;
Node *temp1,*temp2,*temp3;
Node *h3=(h1->next->data<h2->next->data)?h1:h2;
while(q->next!=NULL&&p->next!=NULL)
{
temp2=q->next;
while(q->next!=NULL&&q->next->data<=p->next->data)
q=q->next; temp1=p->next;
while(p->next!=NULL&&p->next->data<=q->next->data)
p=p->next; temp1=p->next;
p->next=temp2;
temp2=q->next;
q->next=temp1;
}
return h3;
}

8.双向链表

 #include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *front;
struct Node *rear;
}BNode; void create(BNode **head1,BNode **head2)
{
int m;
scanf("%d",&m);
BNode *p=NULL,*q=*head2;
while(m>)
{
p=(BNode*)malloc(sizeof(BNode));
p->data=m;
p->front=NULL;
p->rear=NULL; if(*head1==NULL)
{
*head1=p;
*head2=p;
}
else
{
p->rear=*head1;
p->front=NULL;
(*head1)->front=p;
*head1=p;
}
scanf("%d",&m);
}
}
void display(BNode **head1)
{
BNode *h=*head1;
while(h!=NULL)
{
printf("%d ",h->data);
h=h->rear;
}
} void addnode(BNode **head,int m)//插入m
{
BNode *p=*head;
BNode *q=(BNode*)malloc(sizeof(BNode));
q->data=m;
while(p!=NULL&&p->data<m)
{
// printf("%d__",p->data);
p=p->rear;
}
if(p!=NULL)
{
q->rear=p;
q->front=p->front;
p->front->rear=q;
p->front=q;
;
}
}
int main()
{
BNode *head1=NULL,*head2=NULL;
create(&head1,&head2);
display(&head1);
addnode(&head1,);
printf("\n");
display(&head1);
return ;
}

9. 栈 队列

//链栈
#include<stdio.h>
#include<stdlib.h> typedef struct node
{
struct node *next;
int data;
}Node; typedef struct stack
{
Node *top;
}Stack; void Init(Stack *s)
{
s->top=NULL;
} void Push(Stack *s,int m)
{
Node *p=(Node *)malloc(sizeof(Node));
p->data=m;
p->next=s->top;
s->top=p;
} int Pop(Stack *s,int *m)
{
Node *p;
if(s->top==NULL)
return ; *m=s->top->data;
p=s->top;
s->top=p->next;
free(p);
return ;
}
int main()
{
int m=;
Stack *s;
Push(s,);
Push(s,);
if(Pop(s,&m));
{
printf("%d\n",m);
}
getch();
return ;
}
#include<stdio.h>//栈
#include<stdlib.h> typedef struct node
{
int top;
int data[];
}Stack; void Init(Stack *s)
{
s->top=-;
} int Push(Stack *s,int m)
{
if(s->top>=) return ;
s->data[++(s->top)]=m;
return ;
} int Pop(Stack *s,int *m)
{ if(s->top==-) return ;
*m=s->data[s->top--];
return ;
}
int main()
{
int m=;
Stack *s;
Init(s);
Push(s,);
Push(s,);
if(Pop(s,&m));
{
printf("+++%d+++\n",m);
}
if(Pop(s,&m));
{
printf("+++%d+++\n",m);
}
getch();
return ;
}

10.通用链表

11.二叉树的遍历(递归与非递归)

 #include<stdio.h>
#include<stdlib.h>
typedef struct BTNode
{
int data;
struct BTNode *Lchild;
struct BTNode *Rchild;
} BTNode; BTNode *CreateTree()//以递归的方式创建
{
int data;
BTNode *T; printf("Please input a data.");
scanf(" %d",&data);
if(data=='#')
T=NULL;
else
{
BTNode *P=(BTNode*)malloc(sizeof(BTNode));
P->data=data;
P->Rchild=CreateTree();
P->Lchild=CreateTree();
}
return T;
}
void Preorder(BTNode *T)//递归方式的前序遍历
{
if(T!=NULL)
{
printf("%d ",T->data);
Preorder(T->Lchild);
Preorder(T->Rchild);
}
} int main()
{
BTNode *T=NULL;
T=CreateTree();
Preorder(T); return ;
}

12.make file

  参考链接:跟我一起写makefile http://blog.csdn.net/liang13664759/article/details/1771246

13.静态库  动态库

  参考资料:http://blog.chinaunix.net/uid-23069658-id-3142046.html

14.哈希表

关于15桥梁课程1&2的笔记以及待做事项的梳理的更多相关文章

  1. QML学习笔记(五)— 做一个简单的待做事项列表

    做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...

  2. Hadoop学习笔记(8) ——实战 做个倒排索引

    Hadoop学习笔记(8) ——实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如 ...

  3. php课程 9-33 php文件操作里面的注意事项有哪些

    php课程 9-33 php文件操作里面的注意事项有哪些 一.总结 一句话总结:文件操作其实很简单,就是几个文件操作函数需要记一下. 1.文件函数如何使用(如何找php文件函数的资料)? 查看参考手册 ...

  4. 斯坦福经典AI课程CS 221官方笔记来了!机器学习模型、贝叶斯网络等重点速查...

    [导读]斯坦福大学的人工智能课程"CS 221"至今仍然是人工智能学习课程的经典之一.为了方便广大不能亲临现场听讲的同学,课程官方推出了课程笔记CheatSheet,涵盖4大类模型 ...

  5. &lt;&lt;Python基础课程&gt;&gt;学习笔记 | 文章13章 | 数据库支持

    备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库.和SQLite做演示样本 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,如今已经 ...

  6. TensorFlow入门实操课程第一章练习笔记

    在本练习中,您将尝试构建一个神经网络,让它根据一个简单的公式来预测房屋的价格. 想象一下,如果房子的定价很简单,带一间卧室的房子价格是5万+5万,那么一间卧室的房子要花10万元:两间卧室的房子就要花1 ...

  7. 斯坦福NG机器学习课程:Anomaly Detection笔记

    Anomaly Detection Problem motivation: 首先描写叙述异常检測的样例:飞机发动机异常检測 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  8. cocos代码研究(15)Widget子类CheckBox学习笔记

    理论基础 复选框是一种特定类型的“两状态”按钮,可以处于“选中”和“未选中状态”.继承自AbstractCheckButton.注 AbstractCheckButton继承自Widget类. 代码部 ...

  9. [2017.02.15] 《C++Primer5》 复习笔记

    编程语言主要是提供一个框架,用计算机能够处理的方式来表达问题的解决方法. 自定义数据类型class的基本思想是数据抽象dataabstraction和封装encapsulation.数据抽象是一种依赖 ...

随机推荐

  1. EOJ - 3631 Delivery Service 2018.8华师大月赛(树链剖分+贪心)

    链接:https://acm.ecnu.edu.cn/contest/103/problem/D/ 题意:给你一棵无向边连接的树,边的权值可以任意互换.有m次运输,每次的花费是点u到v路径上边的权值和 ...

  2. SqlHelper简单实现(通过Expression和反射)4.对象反射Helper类

    ObjectHelper的主要功能有: 1.通过反射获取Entity的实例的字段值和表名,跳过自增键并填入Dictionary<string,string>中. namespace RA. ...

  3. Hadoop创始人Doug Cutting寄语2017:五种让开源项目成功的方法

    原文链接:http://www.infoq.com/cn/news/2017/01/Hadoop-2017-5-open-source?utm_source=tuicool&utm_mediu ...

  4. Windows安装多个Tomcat服务

    1.下载tomcat解压,并复制三份(用压缩版的不要用安装版的) 2.配置环境变量CATALINA_HOME和CATALINA_BASE .改端口 修改文件server.xml,修改3个端口号 < ...

  5. jmeter之报告和分析

    转载:http://www.cnblogs.com/miaomiaokaixin/p/6118081.html jmeter -n -t 脚本名字.jmx -l xxx.jtl -e -o 指定目录( ...

  6. SVN使用—工作模式及运行原理以及优缺点对比

    一.SVN原理 (1)运行方式 svn服务器有2种运行方式:独立服务器和借助apache运行. 1.独立服务器访问 访问地址如:svn://svn.test.com/test 2.借助Apache等h ...

  7. Linux静默安装Oracle

    打算在云服务器上装oracle服务,以前DBA美眉都是在图形化界面下安装,这次抓瞎了.赶紧上网查查,静默安装可以解决问题.于是乎赶紧开始部署,过程如下.安装环境:操作系统:CentOS 7内存:11G ...

  8. Python中用format函数格式化字符串的用法(2.7版本讲解哦!)

    语法 它通过{}和:来代替%.“映射”示例 通过位置 In [1]: '{0},{1}'.format('kzc',18) Out[1]: 'kzc,18' In [2]: '{},{}'.forma ...

  9. Git服务器的Gitosis安装配置及gitignore的使用方法

    Git服务器Gitosis安装设置 1.安装 openssh服务器 sudo apt-get install openssh-server openssh-client 2.创建个人公钥和私钥 在默认 ...

  10. JAVA基础补漏--继承

    子类的对象在创建时,首先调用父类的构造函数,再调用子类自己的构造函数. 子类的构造函数中,有一个默认的super(),为一个无参调用,这个不显示,但会被首先调用,所有才会有父类构造函数被调用的情况. ...