鱼C论坛

 找回密码
 立即注册
查看: 1721|回复: 0

在这个基础上改动制作一个通讯录管理系统?求帮忙!!!

[复制链接]
发表于 2014-5-6 16:13:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>
struct link*AppendNode(struct link*head);
void DisplyNode(struct link*head);
void DeleteMemory(struct link*head);
struct link
{
        int data;
        struct link*next;
};
int main()
{
        int i=0;
        char c;
        struct link*head=NULL;/*链表头指针*/
        printf("Do you want to append a new node(Y/N)?");
        scanf("%c",&c);/*%c前面有一个空格*/
        while(c=='Y'||c=='Y')
        {
                head=AppendNode(head);/*向head为头指针的链表末尾添加节点*/
                DisplyNode(head);/*显示当前链表中的各节点信息*/
                printf("Do you want to append a new node(Y/N)?");
                scanf("%c",&c);/*%c前面有一个空格*/
                i++;
        }
        printf("%d new nodes have been apended! \n",i);
        DeleteMemory(head);/*释放所有动态分配的内存*/
        return 0;
}
/*函数功能:新建一个节点并添加到链表末尾,返回添加节点后的链表的头指针*/
struct link*AppendNode(struct link*head)
{
        struct link*p=NULL,*pr=head;
        int data;
        p=(struct link*)malloc(sizeof(struct link));/*让p指向新建节点*/
        if (p==NULL)/*若为新建节点申请内存失败,则退出程序*/
        {
                printf("NO enough memory to allocate! \n");
                exit(0);
        }
        if (head==NULL)/*若原链表为空表*/
        {
                head=p;/*将新建节点置为头结点*/
        }
        else/*若原链表为非空,则将新建节点添加到表尾*/
        {
                while (pr->next!=NULL)
                                   /*若未到表尾,则移动pr直到pr指向表尾*/
                {
                        pr=pr->next;/*让pr指向下一个节点*/
                }
                pr->next=pr;/*让末节点的指针域指向新建节点*/
        }
        printf("Input node data:");
        scanf("%d",&data);/*输入借点数据*/
        p->data=data;/*将新建节点的数据域值为输入的节点数据值*/
        p->next=NULL;/*将新建节点置为表尾*/
        return head;/*返回添加节点后的链表的头指针*/
}
/*函数的功能:显示链表中所有节点的节点号和该节点中的数据项内容*/
void DisplyNode(struct link*head)
{
        struct link*p=head;
        int j=1;
        while (p!=NULL)/*若不是表尾,则循环打印节点的值*/
        {
                printf("%5d%10d\n",j,p->data);/*打印第j个节点的数据*/
                p=p->next;/*让p指向下一个节点*/
                j++;
        }
}
/*函数功能:释放head指向的链表中所有节点占用的内存*/
void DeleteMemory(struct link*head)
{
        struct link*p=head,*pr=NULL;
        while (p!=NULL)/*若不是表尾,则释放节点占用的内存*/
        {
                pr=p;/*在pr中保存当前节点的指针*/
                p=p->next;/*让p指向下一个节点*/
                free(pr);/*释放pr指向的当前节点占用的内存*/
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 08:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表