王老师 结构体 第二讲

原创 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);
}

 

相关文章推荐

<深入理解C指针>学习笔记和总结 第六章 指针和结构体 第二部分

指针支持数据结构(cap6后一部分,也是数据结构相关) 链表(单) 队列 二叉树 2 代码相关: 准备函数: typedef struct _employee{     ...

王老师讲解:SQL Server 2005数据库nolock的使用【来自Aisino_BBS】

前两天去安徽航天信息解决A6系统的性能问题,去之前进销存项目组研发人员小苏和小卢把他们认为性能 有问题的SQL已经发给了我,我把优化方法提交给了他们。本以为到那之后会非常轻松,但还是有些插曲在其中。 ...

王老师拼音输入法的算法

N元语言模型的解码算法 分类: 微软拼音输入法开发工程师专栏2011-02-28 16:11 8155人阅读 评论(11) 收藏 举报 ----------------------...
  • fish341
  • fish341
  • 2012年07月02日 17:55
  • 9413

FPGA王老师问答

  • 2013年07月12日 16:41
  • 37KB
  • 下载

王老师ajax

  • 2013年01月07日 08:59
  • 5.1MB
  • 下载

【传智播客】PS中的魔棒工具-王老师第一次作业!

传智播客( http://icd.itcast.cn/)是一家网页平面设计培训学院,专注于网页设计培训,平面设计培训,fash培训,ui设计培训。   【传智播客】 王老师 免费视频教程...

第一次用博客之有所想——致敬王老师

本篇文章不是技术文章。只是我个人对目前状况的总结与反思。

HTML5的优点及缺点,汇道科技王老师来解答

HTML5的优缺点是什么?作为HTML的第五次重大修改,HTML5有哪些改进?HTML5又有哪些缺点?   HTML5本身是由W3C推荐出来的,它的开发是通过谷歌、苹果,诺基亚、中国移动等几百家公司...

大四用的网络技术王老师教的03

  • 2010年08月30日 11:46
  • 5.04MB
  • 下载

大四王老师教的技术02

  • 2010年08月30日 11:37
  • 9.46MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:王老师 结构体 第二讲
举报原因:
原因补充:

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