您的位置:首页 > 理论基础 > 数据结构算法

黑马程序员———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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: