王老师 结构体 第二讲

原创 2006年05月27日 17:16:00

1.动态申请内存块,原型:

void * malloc(int  x);

功能:申请大小为x的内存块,返回所分配内存起始地址或空指针.该空间是在堆中分配的.

释放内存:

void free(void *p);

p所指的内存区域一定是由函数malloc分配的.

2.定义新类型名:

typedef 复合说明项

其好处在于:能为c语言中没有名字的数据类型定义一个名字.

例如:

typedef int T;              T a, b[10];

typedef int *IP;           IP p, *q, r[10]; <==> int *p, **q, *r[10];

typedef int A[10];        A x, y[5], *p;    <==> int x[10], y[5][10], (*p)[10];

typedef int F(int);        F *f;                 <==> int (*f)(int);

c语言中唯一的一个先使用后定义的情况:

typedef struct node NODE;

struct node {
 int info;
 NODE *next;
};

3.链表插入(按值从小到大排列)

示例程序代码如下:

#include "stdio.h"
#include "malloc.h"

typedef struct node NODE;

struct node {
 int info;
 NODE *next;
};

//链表插入,不正确.
void insert(NODE *h, int x){
 NODE *p = h, *q, *r;
 while(p != NULL && p->info < x){
  q = p;
  p = p->next;
 }
 //生成一个新节点
 r = (NODE *)malloc(sizeof(NODE));
 r->info = x;
 if(h != p){
  q->next = r;
  r->next = p;
 }else{
  r->next = h;
  h = r;
 }
}

//链表插入,法一.
void insert1(NODE **h, int x){
 NODE *p = *h, *q, *r;
 while(p != NULL && p->info < x){
  q = p;
  p = p->next;
 }
 //生成一个新节点
 r = (NODE *)malloc(sizeof(NODE));
 r->info = x;
 if(*h != p){
  q->next = r;
  r->next = p;
 }else{
  r->next = *h;
  *h = r;
 }
}

//链表插入,法二.
NODE * insert2(NODE *h, int x){
 NODE *p = h, *q, *r;
 while(p != NULL && p->info < x){
  q = p;
  p = p->next;
 }
 //生成一个新节点
 r = (NODE *)malloc(sizeof(NODE));
 r->info = x;
 if(h != p){
  q->next = r;
  r->next = p;
 }else{
  r->next = h;
  h = r;
 }
 return h;
}

//打印链表
void print(NODE *h){
 while(h){
  printf("%d/t", h->info);
  h = h->next;
 }
}

void main()
{
 NODE *head = NULL;
 //insert(head, 10);
 //insert(head, 20);
 //insert(head, 15);
 //什么也没打印,具体分析略,应如何改?
 //print(head);
 
 //法一,传指针,改变head值
 //insert1(&head, 10);
 //insert1(&head, 20);
 //insert1(&head, 15);
 //print(head);
 
 //法二,返回头节点
 head = insert2(head, 10);
 head = insert2(head, 20);
 head = insert2(head, 15);
 print(head);
}

 

王老师 指针 第二讲

(7)二级指针指向一级指针的指针.类似的,可有更高级的指针.(8)指向数组的指针声明语法: 类型名 (*变量名)[表达式1]...[表达式n];(9)指向函数的指针声明语法: 值类型 (*指针名)(形...
  • nomad2
  • nomad2
  • 2006年05月20日 20:13
  • 1970

王老师 C++ 函数重载和模板 第二讲

(1)连接指示符:通知编译器,某个函数是由其它语言编写的。语法:1. extern "语言名" 函数原型;2. extern "语言名" {  函数原型1;  ...  函数原型n;}3.extern...
  • nomad2
  • nomad2
  • 2006年06月10日 20:22
  • 2255

王老师 C++ 运算符重载 转换函数 第二讲

1.赋值函数的重载示例程序代码如下#include "stdafx.h"#include class stack{private: int *sp, top, max; void inflate();...
  • nomad2
  • nomad2
  • 2006年06月25日 22:13
  • 2752

15. 机器学习基石 - Summary - Power of Three

Summary - Power of Three Summary - Power of Three 1. Three Related Fields 1) Machine Learning V.S....
  • jasonwoolf
  • jasonwoolf
  • 2017年10月13日 10:35
  • 439

斯坦福深度学习课程解释--第二课

最近开始看深度学习的视频。我从youtube上下载了斯坦福的2016年cs224D。感到其中有一些内容需要注解,便于自己的理解。在此也拿出来和大家分享。 第一课是入门的简介,没什么好解释的,从第二课开...
  • liji_digital
  • liji_digital
  • 2016年12月25日 14:41
  • 198

openCV2 第二讲 操作像素

本章主要讨论:
  • super_CV
  • super_CV
  • 2014年11月22日 17:52
  • 506

《机器学习基石》笔记:第二讲

第二讲主要是通过PLA(Perceptron Learning Algorithm)讲解二分类问题(Binary Classification)。关于PLA算法的基础内容,在这篇博文已经深入探究了,该...
  • sinat_30537123
  • sinat_30537123
  • 2017年10月09日 20:18
  • 65

麻省理工《算法导论》公开课学习笔记【2】

这节课主要是讲了算法中用到的渐进符号和递归式的算法效率计算方法。         对于渐进符号的讲解,我吸收不多。。。主要是对主定理印象挺深,而且在之后的很多递归方法中需要用到。 在此,我就把主定...
  • julius819
  • julius819
  • 2012年12月06日 21:35
  • 904

Machine Learning第二讲[多变量线性回归] -(二)计算参数分析

内容来自Andrew老师课程Machine Learning的第二章内容的Computing Parameters Analytically部分。一、Normal Equation使用梯度下降法得到最...
  • quiet_girl
  • quiet_girl
  • 2017年04月11日 18:51
  • 419

王老师 结构体 第一讲

一种数据类型,由多个分量构成,共同描述一个对象.声明语法:struct 类型名{ 分量类型1 分量名1; ... 分量类型n 分量名n;};结构型变量定义: struct 结构类型名 变量名;分配内存...
  • nomad2
  • nomad2
  • 2006年05月20日 20:36
  • 1509
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:王老师 结构体 第二讲
举报原因:
原因补充:

(最多只允许输入30个字)