网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文
链表的综合应用.
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式

 

/********结构体和指针的应用………单链表的建立.输出.删除.插入******************/  /*建立链表///////////////////////////////////////////////////////////*/#include <stdio.h>#include <malloc.h>#define NULL 0#define LEN sizeof(struct student)struct student{    long num;    float score;    struct student *next;};int n;                     /*n为全局变量,本文件模块中各函数均可使用它*/struct student *creat(void)/*定义函数.此函数带回一个指向链表头的指针*/{    struct student *head;    struct student *p1,*p2;    n=0;    p1=p2=(struct student *)malloc(LEN); /*开辟一个新单元*/    scanf("%ld,%f",&p1->num,&p1->score);    head=NULL;    while (p1->num!=0)    {        n=n+1;        if (n==1) head=p1;        else p2->next=p1;        p2=p1;        p1=(struct student *)malloc(LEN);        scanf("%ld,%f",&p1->num,&p1->score);    }    p2->next=NULL;    return (head);}注意:(1)第3行为#define命令行,令NULL代表0,用它表示”空地址”.第4行令LEN代表struct student类型数据的长度,sizeof是“求字节数运算符”.(2)第10行定义一个creat函数,它是指针类型,即此函数带回一个指针值,它指向一个struct student类型数据.实际上此creat函数带回一个链表起始地址.(3)malloc(LEN)的作用是开辟一个长度为LEN的内存区,LEN已定义为sizeof(struct student), 即结构体struct student的长度.malloc带回的是不指向任何类型数据的指针(void *).而p1.p2是指向struct student类型数据的指针变量,因此必须用强制类型转换的方法使指针的基类型改变为struct student类型,在malloc(LEN)之前加了“(struct student*)”,它的作用是使malloc返回的指针转换为指向struct student类型数据的指针. 注意”*”号不可省略,否则变成转换成struct student类型了,而不是指针类型了.(4)最后一行return后面的参数是head(head已定义为指针变量,指向struct student类型数据).因此函数返回的是head的值,也就是链表的头地址.(5)n是结点个数.(6)这个算法的思路是让p1指向新开辟的结点,p2指向链表中最后一个结点,把p1所指的结点连接在p2所指的结点后面,用“p2->next=p1”来实现.   /*输出链表*//////////////////////////////////////////////////////////////*/首先要知道链表第一个结点的地址,也就是要知道head的值.然后设一个指针变量p,先指向第一个结点,输出p所指向的结点,然后使p后移一个结点,再输出,直到链表的尾结点.Head的值由实参传过来,也就是将已有的链表的头指针传给被调用的函数,在print函数中从head所指的第一个结点出发顺序输出各个结点。void print(struct student *head){    struct student *p;    printf("\nNow,These %d records are:\n",n);    p=head;    if (head!=NULL)        do         {printf("%ld %5.lf\n",p->num,p->score);p=p->next;        } while(p!=NULL);}&
  • 下一篇资讯: 素数的几种解法
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号