链表实现简单操作

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
typedef struct node
{
    char name[20];//姓名
    char num[20];//学号
    char sex;//性别
    struct node *next;
}slink;
void deletef(slink *head);//删除操作
void insert(slink *head);//插入操作
void seek(slink *head);//查找操作
void print(slink *head);//打印操作
int main()//主程序
{
    int choose;
    slink *head=(slink *)malloc(sizeof(slink));
    head->next=NULL;
    printf("\t*****************用链表实现一些操作******************\n");
    printf("\t*         ---------1:插入操作                       *\n");
    printf("\t*         ---------2:删除操作                       *\n");
    printf("\t*         ---------3:查找操作                       *\n");
    printf("\t*         ---------4:打印操作                       *\n");
    printf("\t*         ---------5:退出                           *\n");
    printf("\t*****************************************************\n\n");
    printf("\t                           ---------- made by beyond\n");
    printf("请输入您的选择:\n");
    scanf("%d",&choose);
    getchar();
    while(1)
    {
        if(choose<1||choose>5)
        {
            printf("输入错误!请重新输入:\n");
            scanf("%d",&choose);
            getchar();
        }
        else
            switch(choose)
            {
                case 1:
                    insert(head);
                    printf("\n按任意键继续\n");
                    getchar();
                    system("cls");
                    break;
                case 2:
                    deletef(head);
                    printf("\n按任意键继续\n");
                    getchar();
                    system("cls");
                    break;
                case 3:
                    seek(head);
                    printf("\n按任意键继续\n");
                    getchar();
                    system("cls");
                    break;
                case 4:
                    print(head);
                    printf("\n按任意键继续\n");
                    getchar();
                    system("cls");
                    break;
                case 5:
                    {
                        printf("谢谢使用\n");
                        exit(0);
                    }
                    break;
        }
    printf("\t*****************用链表实现一些操作******************\n");
    printf("\t*         ---------1:插入操作                       *\n");
    printf("\t*         ---------2:删除操作                       *\n");
    printf("\t*         ---------3:查找操作                       *\n");
    printf("\t*         ---------4:打印操作                       *\n");
    printf("\t*         ---------5:退出                           *\n");
    printf("\t*****************************************************\n\n");
    printf("\t                           ---------- made by beyond\n");
    printf("请输入您的选择:\n");
    scanf("%d",&choose);
    getchar();
    }
    return 0;
}
void insert(slink *head)
{
    slink *p,*q;
    q=head;
    while(q->next!=NULL)
        q=q->next;
    p=(slink *)malloc(sizeof(slink));
    if(p)
    {
        printf("请输入姓名:\n");
        gets(p->name);
        printf("请输入学号:\n");
        scanf("%s",&p->num);
        getchar();
        printf("请输入性别(w/m):\n");
        scanf("%c",&p->sex);
        getchar();
        p->next=q->next;
        q->next=p;
        printf("插入成功!\n");
    }
    else
        printf("插入失败!可能原因:内存已满。\n");
}
void deletef(slink *head)
{
    slink *p,*q;
    char str[20];
    p=head->next;
    q=head;
    if(head->next==NULL)
        printf("链表为空,无元素可删除。\n");
    else
    {
        printf("请输入要删除人的姓名或者学号:\n");
        gets(str);
        while(p!=NULL)
        {
            if(strcmp(p->name,str)!=0&&strcmp(p->num,str)!=0)
            {
                q=p;
                p=p->next;
            }
            else
                break;
        }
    }
        if(p==NULL)
            printf("未找到要删除的结点\n");
        else
        {
            q->next=p->next;
            free(p);
            printf("删除成功\n");
        }
}
void seek(slink *head)
{
    slink *p;
    char str[20];
    p=head->next;
    if(p==NULL)
        printf("链表为空,请先插入结点。\n");
    else
    {
        printf("请输入要查找的人的姓名或者学号:\n");
        gets(str);
        while(strcmp(p->name,str)!=0&&strcmp(p->num,str)!=0)
            p=p->next;
        if(p==NULL)
            printf("要查找的结点不存在。\n");
        else
        {
            printf("所查找的信息为:\n");
            printf("-------姓名-------性别-------学号------\n");
            printf("        %s         %c        %s       \n",p->name,p->sex,p->num);
        }
    }
}
void print(slink *head)
{
    slink *p;
    int count=0;
    p=head->next;
    if(p==NULL)
        printf("链表为空\n");
    else
    {
        printf("信息输出:\n");
        printf("---------姓名----------性别---------学号----------\n");
        while(p!=NULL)
        {
            printf("         %s             %c           %s\n",p->name,p->sex,p->num);
            count++;
            p=p->next;
        }
        printf("-----------总计:%d\n\n",count);
    }
}

转载于:https://www.cnblogs.com/iLinuxC/archive/2012/03/28/2421060.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值