• 单链表相关操作


    #include <stdio.h>
    #include <stdlib.h>
    #define LEN sizeof(struct node)
    typedef struct node{
        int data;
        struct node *next;
    }List;
    
    List *selectsort(List *head)
    {
        List *p,*q,*min;
        int tmp;
        for(p=head;p->next!=NULL;p=p->next)
        {
            min=p;
            for(q=p->next;q!=NULL;q=q->next)
                if(q->data<min->data) 
                    min=q;
            if(min!=p)
            {
                tmp=p->data;
                p->data=min->data;
                min->data=tmp;
            }
        }
        return head;
    }
    List *insfun(List *head)//在已排好升序的链表中插入一个结点,仍保持升序 
    {
        List *p1,*p2,*p; 
        int m;
        printf("请输入要插入的结点的值:");
        scanf("%d",&m);
        p1=(List*)malloc(LEN);
        p1->data=m;
        if(head==NULL)
        {
            head=p1;p1->next=NULL;return head;
        }
        p=p2=head;
        if(m<=head->data)
        {
            p1->next=head;
            head=p1;
            return head;
        }
        while(p2&&m>=p2->data)
        {
            p=p2;
            p2=p2->next;
        }
        p->next=p1;
        p1->next=p2;
        return head;
    } 
    List *delfun(List *head)//删除结点
    {
        List *p1,*p2,*p;
        int m;//m代表要删除的结点值
        printf("请输入要删除的结点:");
        scanf("%d",&m);
        if(head==NULL)return NULL;
        if(m==head->data)//如果m恰好等于头结点,让head指向下一个结点 
        {
            p=head;
            head=head->next;
            free(p);
            return head;
        }
        p2=head;p1=head->next;
        while(p1&&p1->data!=m) 
        {
            p2=p1;
            p1=p1->next;
        }
        if(p1!=NULL)//表示找到了要删除的结点 
        {
            p=p1;
            p2->next=p1->next;
            free(p);
        }
        else printf("没有找到要删除的结点
    ");
        return head;
    }
    void findfun(List *head)//查找值为n的结点
    {
        List *p=head;int n;
        if(head==NULL)return; 
        printf("请输入要查找的结点值:");
        scanf("%d",&n);
        while(p&&p->data!=n)
            p=p->next;
        if(p) 
            printf("找到此结点,其值为:%d
    ",p->data);
        else printf("查无此结点
    ");
    } 
    List *creat()//建立链表以-1结束
    {
        printf("请输入创建链表结点值,以-1结束
    "); 
        List *head=NULL,*p1,*p2;
        p1=p2=(List*)malloc(LEN);
        scanf("%d",&p1->data);
        while(p1->data>=0)
        {
            if(head==NULL)head=p1;
            else p2->next=p1;
            p2=p1;
            p1=(List*)malloc(LEN);
            scanf("%d",&p1->data);
        }
        p2->next=NULL;
        return head;
    }
    
    void print(List *head)//输出链表 
    {
        List *p=head;
        if(head==NULL)return;
        while(p)
        {
            printf("%4d",p->data);
            p=p->next;
        }
        printf(" end.
    ");
    }
    int main() {
        List *head;
        int n;
        printf("	***链表相关操作***
    ");
        printf("请选择要进行的操作:
    ");
        printf("1. 创建链表
    ");
        printf("2. 排序链表
    ");
        printf("3. 增加链表结点
    ");
        printf("4. 删除链表结点
    ");
        printf("5. 显示链表
    ");
        printf("6. 查找链表结点
    ");
        printf("0. 结束程序
    ");
        scanf("%d",&n);
        while(n>6||n<0)
        {
            printf("输入错误,请重新输入");scanf("%d",&n);
        }
        while(n>=0)
        {
            switch(n)
            {
                case 1:head=creat(head);print(head);break;
                case 2:head=selectsort(head);print(head);break;
                case 3:head=insfun(head);print(head);break;
                case 4:head=delfun(head);print(head);break;
                case 5:print(head);break;
                case 6:findfun(head);break;
                case 0:return 0;
                default:printf("输入错误,请重新输入");scanf("%d",&n);break;
            }
            printf("请选择要进行的操作:
    ");
            scanf("%d",&n);
        }
        return 0;
    }
  • 相关阅读:
    在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口
    使用Setup Factory安装包制作工具制作安装包
    PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
    在DevExpress中使用CameraControl控件进行摄像头图像采集
    读取数据库信息构建视图字段的备注信息,方便程序代码生成
    混合框架中Oracle数据库的还原处理操作
    使用图片视频展示插件blueimp Gallery改造网站的视频图片展示
    .NET缓存框架CacheManager在混合式开发框架中的应用(1)-CacheManager的介绍和使用
    在Winform界面菜单中实现动态增加【最近使用的文件】菜单项
    文字处理控件TX Text Control的使用
  • 原文地址:https://www.cnblogs.com/yanglike111/p/13190849.html
Copyright © 2020-2023  润新知