实验一 线性表的应用(2学时)


1、实验目的
通过本实验,掌握线性表链式存储结构的基本原理和基本运算以及在实际问题中的应用。
2、实验内容                                                      
  建立某班学生的通讯录,要求用链表存储。
  具体功能包括:
(1)可以实现插入一个同学的通讯录记录;
     (2)能够删除某位同学的通讯录;
      (3)对通讯录打印输出。
3、实验要求
(1)定义通讯录内容的结构体;
(2)建立存储通讯录的链表结构并初始化;                                                 
(3)建立主函数:
       1)建立录入函数(返回主界面)
       2)建立插入函数(返回主界面)
       3)建立删除函数(返回主界面)
       4)建立输出和打印函数(返回主界面)
            I)通过循环对所有成员记录输出
           II)输出指定姓名的某个同学的通讯录记录
       5)退出


#include<stdio.h>

#include<string.h>
#include<stdlib.h>
#define MAXSIZE 12
typedef int datatype;
typedef struct link_node{
    char name[10];
    char tell[MAXSIZE];
    struct link_node *next;
}node;

node *init()
{
    node *head;
    head=(node *)malloc(sizeof(node));
    head->next=NULL;
}
void Insert(node *head)            //尾插法实现插入多个同学的通讯录记录;
{
    node *p,*q=head;
    int n;
    while(q->next) q=q->next;
    scanf("%d",&n);
    while(n)
    {
        p=(node*)malloc(sizeof(node));
        printf("输入姓名:");
        scanf("%s",p->name);
        printf("输入电话:");
        scanf("%s",p->tell);
        p->next=NULL;
        q->next=p;
        q=q->next;
        n--;
    }
}

void display(node *head)            //通讯录打印输出
{
    node *p;
    p=head->next;
    if(!p)
    {
    printf("\n暂无通讯录信息!");
    }
    else
    {
        while(p)
        {
        printf("姓名: %s\n",p->name);
        printf("电话: %s\n",p->tell);
        p=p->next;
        }
    }
}

node *Find(node *head)                    //查找通讯录是否存在要删除的信息
{
    node *p;
    p=head->next;
    char name[10];
    char tell[MAXSIZE];
    int t;
    printf("****************\n");
    printf("1.按姓名查找 \n");
    printf("2.按电话查找 \n");
    printf("****************\n");
    printf("请选择1/2:");
    scanf("%d",&t);
    if(t==1)
    {
        printf("输入所查找的姓名:");
        scanf("%s",name);
        while(p&&strcmp(p->name,name)!=0)
        p=p->next;

    }
    else if(t==2)
    {
        printf("输入所查找的电话:");
        scanf("%s",tell);
        while(p&&strcmp(p->tell,tell)!=0)
        p=p->next;

    }
    else
    {
        printf("输入有误,请重新输入\n");
        Find(head);
    }
    return p;
}

node *dele(node *head)                       //通讯录上信息的删除
{
    node *p,*q;
    p=Find(head);
    q=head;
    if(p!=NULL)
    {
        while(q->next!=p)
            q=q->next;
        q->next=p->next;
        free(p);
        printf("通讯者已被删除!\n");
    }
    else
    {
            printf("没有查到要查找的电话信息!\n");
            p=NULL;
    }
    return head;
}

int main()
{
    int k,j=1;
    node *head;
    printf("****************\n");
    printf(" 1.初始化\n");
    printf(" 2.通讯录的删除\n");
    printf(" 3.通讯录的打印\n");
    printf(" 4.通讯录的插入\n");
    printf(" 0.退出查询系统\n");
    printf("****************\n");
    printf("\n请选择菜单(0-4):");
    while(j)
    {
        scanf("%d",&k);
        switch(k)
        {
        case 1:
            {
                printf("初始化完成     \n");
                head=init();

            }break;
        case 4:
            {
                printf("通讯录的插入     \n");
                Insert(head);
            }break;
        case 2:
            {
                printf("通讯录的删除     \n");
                dele(head);
            }break;
        case 3:
            {
                printf("通讯录的打印     \n");
                display(head);
            }break;
        case 0:
            {
                j=0;
            }break;
        default:
            {
                printf("输入有误,请重新输入!\n");
                getchar();
                break;
            }
        }
    }
    return 0;
}


  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值