黑马程序员———C语言———【数据结构:单链表】
2015-08-19 14:24
405 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
——————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————
</pre><pre name="code" class="cpp">#include <stdio.h> #include <stdlib.h> #include <string.h> /* 单链表思路: 当我们在内存中用malloc申请内存空间时,内存分配的空间地址不一定是连续的,因此我们要想将这些不连续的内存空间在使用上变得 连续起来,在不使用数组等集合的情况下,可以使用单链表。 单链表就是一块内存空间分为两部分,一部分用来存储数据,另一部分用来存放指针,该指针指向另一个数据的地址。 这样,只要我们设置合理,利用头数据就可以找到下一个数据(利用头数据的指针找到下一个数据)。 问题: (1)头数据:先创建一个头指针,赋值NULL,后面检测改头指针是否有值,没值就给它赋值,有值就证明先前已经有数据了,这样就让上 一个数据的指针指向新创建的这个数据。数据就连起来了。 (2)当前数据的初始化:首先,当前结构体中会有一个指针用来指向下一个数据。在程序执行的时候,给当前的结构体指针赋值,但是该 结构体指针变量中的指针变量成员要赋值为NULL,以便于让这个赋值为NULL的指针成员变量指向我们下一个要创建的结构体指针,如果不 创建了,则证明被赋值为NULL的这个结构体指针变量是最后一个数据。 细节: gets()的结束判断条件是:回车('\n'),在结束之前,会给已经输出的字符串的结尾加上字符串结束符'\0'。 puts()和scanf("%s",x)输出字符串都会读到'\0',之后的不会再输出。 */ struct Film{ char title[40]; int rating; struct Film *next; }; int main() { struct Film *head=NULL; //这里一定要赋值null struct Film *prev,*current; char input[40]; printf("enter first movie title:"); while(gets(input)!=NULL && input[0]!='\0'){ current=(struct Film *)malloc(sizeof(struct Film)); if(head==NULL){ head=current; }else{ prev->next=current; } current->next=NULL; strcpy(current->title,input); printf("please enter the movie rating:"); scanf("%d",¤t->rating); if(getchar()!='\n'){ break; } prev=current; printf("\n"); printf("enter next movie title(empty line to stop):"); } //展示电影列表 //从头数据开始,所以把头数据交给current current=head; while(current!=NULL){ printf("movie title is :%s , movie rating is %d .\n",current->title,current->rating); current=current->next; } //释放内存 current=head; while(current!=NULL){ free(current); current=current->next; } printf("bye!\n"); }
相关文章推荐
- 数据结构之树与二叉树(理论篇)
- 【c++版数据结构】之顺序表的实现
- PAT-中国大学MOOC-陈越、何钦铭-数据结构基础习题集 00-自测5. Shuffling Machine (20) (简单模拟)【二星级】
- PAT-中国大学MOOC-陈越、何钦铭-数据结构基础习题集 00-自测4. Have Fun with Numbers (20) 【二星级】
- 使用C语言构建基本的二叉树数据结构
- 数据结构的各种排序算法稳定性比较
- 二叉树学习笔记-深度和宽度
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 散列-分离链接法(数据结构与算法分析-C语言描述)
- typedef关键字与结构体、结构体指针的定义
- HDU 3642 Get The Treasury (线段树扫描线进阶--求长方体重叠3次或以上的体积)
- 数据结构学习笔记5-寻找最小的k个数(选择排序和堆排序)
- HDU 1255 覆盖的面积 (线段树扫描线)
- ACM经典算法之数据结构
- MongoDB学习二--MongoDB 数据结构和查询
- 散列-分离链接法(数据结构与算法分析-C语言描述)
- 数据结构(Java语言)——AVLTree简单实现
- iOS开发——OC常用的数据结构一览。
- 数据结构基本概念
- 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法