黑马程序员———C语言———【数据结构:单链表】

来源:互联网 发布:wamp apache无法启动 编辑:程序博客网 时间:2024/06/01 23:49

------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");}

0 0
原创粉丝点击