| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 983 人关注过本帖
标题:关于链表的建立
取消只看楼主 加入收藏
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
收藏
得分:0 
好吧,现在手机上,有空了把代码贴上

菜鸟一名,准备起飞
2011-06-11 08:44
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
收藏
得分:0 
我做了一个链表的通讯管理系统,这做的过程中,遇到的问题有以下几点:
1.链表的建立,刚开始不理解链表的建立为什么会通过
struct connection *s,*p,*h;
然后再建立链表,通过一些最基本的探索才明白。。char c;
    struct connection *s;
    while(p->next==NULL)                                          
    {
             s=(struct connection*)malloc(sizeof(struct connection));
             p->next=s;                        //把s的地址赋值给p-next
             printf("请输入编号:\n");
             scanf("%d",&s->number);
                printf("请输入名字:\n");
              fflush(stdin);
             gets(s->name);
             printf("请输入地址:\n");
             fflush(stdin);
             gets(s->adress);
             printf("请输入联系电话或者手机:\n");
             fflush(stdin);
             gets(s->tphone);
             printf("请输入QQ号:\n");
             fflush(stdin);
             gets(s->qq);
             p=s;
             printf("是否还要继续增加?y/n\n");
             fflush(stdin);
             scanf("%c",&c);
             if(c=='y'||c=='Y')
             {
                 p->next=NULL;
             }
             p=s;                           //把s的地址赋值给p
             if(c!='y'&&c!='Y')
             {
                 p->next=NULL;
                 break;
             }
    }
    return head;
2.在增加记录过程中,我刚开始忽略了怎样续加的过程,到后来有人提醒后才加上,我的续加所实现的方法是令每一次增加过后的最后一个节点的next指向空,这样就使得续加得以实现,如上代码。
3.关于文件,关于文件我是用fprintf和fscanf这样的方法存储和提取的,在这过程中总结出了有几点常识:
(1)当使用feof()语句时,文件指针会指向第一个字节的下一位,也就是说,当我fsanf时,是从第二个字节开始的,所以自爱读的时候会出现“屯”或者少读一个的情况,还有就是保存的时候通过链表保存时,由于头节点是空导致了文件保存后,再去读取时会出现“屯”这种现象。所以我的解决方法是如果我的head->next是空的话,就先不建立这个文件,最后完美解决。
void os(FILE *ps,FILE *ps1,struct connection *head,struct connection *p)                            //写进文件里
{
    rewind(ps);
    rewind(ps1);
    p=head->next;
    fprintf(ps,"\t****************************************************\n");
    fprintf(ps,"编号\t\t名字\t\t地址\t\t电话或联系方式\t\tQQ号\n");
    while(p!=NULL)
    {
        fprintf(ps1," %d %s %s %s %s ",p->number,p->name,p->adress,p->tphone,p->qq);               
        fprintf(ps,"%d %18s %18s %18s %18s\n",p->number,p->name,p->adress,p->tphone,p->qq);
        p=p->next;
     }
    fprintf(ps,"******************************************************\n");
    printf("保存成功!\n");
}
好了,该说的都已经说完了,如果哪位同学仍有对这些不理解的可以问我,我会尽自己最大的努力去解决他们。

[ 本帖最后由 小菜小C 于 2011-6-12 17:47 编辑 ]

菜鸟一名,准备起飞
2011-06-12 17:45
快速回复:关于链表的建立
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026776 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved