关于15桥梁课程1&2的笔记以及待做事项的梳理
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的笔记以及待做事项的梳理的更多相关文章
- QML学习笔记(五)— 做一个简单的待做事项列表
做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...
- Hadoop学习笔记(8) ——实战 做个倒排索引
Hadoop学习笔记(8) ——实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如 ...
- php课程 9-33 php文件操作里面的注意事项有哪些
php课程 9-33 php文件操作里面的注意事项有哪些 一.总结 一句话总结:文件操作其实很简单,就是几个文件操作函数需要记一下. 1.文件函数如何使用(如何找php文件函数的资料)? 查看参考手册 ...
- 斯坦福经典AI课程CS 221官方笔记来了!机器学习模型、贝叶斯网络等重点速查...
[导读]斯坦福大学的人工智能课程"CS 221"至今仍然是人工智能学习课程的经典之一.为了方便广大不能亲临现场听讲的同学,课程官方推出了课程笔记CheatSheet,涵盖4大类模型 ...
- <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持
备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库.和SQLite做演示样本 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,如今已经 ...
- TensorFlow入门实操课程第一章练习笔记
在本练习中,您将尝试构建一个神经网络,让它根据一个简单的公式来预测房屋的价格. 想象一下,如果房子的定价很简单,带一间卧室的房子价格是5万+5万,那么一间卧室的房子要花10万元:两间卧室的房子就要花1 ...
- 斯坦福NG机器学习课程:Anomaly Detection笔记
Anomaly Detection Problem motivation: 首先描写叙述异常检測的样例:飞机发动机异常检測 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...
- cocos代码研究(15)Widget子类CheckBox学习笔记
理论基础 复选框是一种特定类型的“两状态”按钮,可以处于“选中”和“未选中状态”.继承自AbstractCheckButton.注 AbstractCheckButton继承自Widget类. 代码部 ...
- [2017.02.15] 《C++Primer5》 复习笔记
编程语言主要是提供一个框架,用计算机能够处理的方式来表达问题的解决方法. 自定义数据类型class的基本思想是数据抽象dataabstraction和封装encapsulation.数据抽象是一种依赖 ...
随机推荐
- 你真的会用javascript?
偶然在csdn看到几个js的小题,考察的都是很基础的知识,拿来分享一下1. 1 2 3 4 if (!("a" in window)) { var a = 1; } alert(a ...
- linux redhat下oracle11G安装
首先由于使用的是虚拟机,所有要修改ip 在LINUX下修改IP分为二种情况, 1.调试时修改IP,仅在当前生效,重启后恢复为原有IP ifconfig eth0 192.168.63.27 netma ...
- linux 配置tensorflow 全过程记录
前几天刚下一个deepin系统,是基于linux 内核的,界面的设计有些mac的feel 感觉还是挺不错的,之后就赶紧配置了一下tensorflow ,尽管之前配置过,但是这次还是遇到点儿问题,所以说 ...
- 20145201《Java程序设计》第十周学习总结
教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. 在发送和接收 ...
- UDP协议----简单的CS模型实现
UDP简单介绍 传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议.TCP协议在网络通信中占主导地位,绝大多数的网络通信借助TCP协议完成数据传输.但UDP也是网络通信中不可或缺 ...
- Spring_属性配置细节
XML 代码: <!-- 使用构造器注入属性值的位置和参数的类型!以区分重载的构造器! --> <bean id="car1" class="com.h ...
- Maven配置与创建
1.下载Maven工具 从maven官网下载:https://maven.apache.org/download.cgi apache-maven-x.x.x-bin.zip ,解压到指定目录,例如D ...
- python学习(一)——python与人工智能
最近在朋友圈转起了一张图.抱着试一试的心态,我肝了些课程.都是与python相关的. 课程一:你不知道的python 讲师:王玉杰 (混沌巡洋舰联合创始人 & web ...
- mysql CMD命令窗连接 - 转载
cmd连接mysql的方法详解 首先需要进入mysql的安装文件夹bin目录下:cd + C:\Program Files\MySQL\MySQL Server 5.5\bin 连接:mysql -h ...
- BZOJ 3931 [CQOI2015]网络吞吐量:最大流【拆点】
传送门 题意 给你一个 $ n $ 个点,$ m $ 条边的无向网络,每条边有长度.每个点的流量限制为 $ c[i] $ . 要求流量只能经过从 $ 1 $ 的 $ n $ 的最短路.问你最大流是多少 ...