zoukankan      html  css  js  c++  java
  • 数据结构实验2——链表

    <span style="font-size:18px;">#include <stdio.h>
    #include <stdlib.h>
    
    typedef struct LNode
    {
        char data;
        struct LNode *next;
    }LNode,*Linklist;
    int flag=0;
    void menu()
    {
        printf("	链表的基本操作实验		
    ");
        printf("*****************************************
    ");
        printf("*请选择命令序号(0——7):		*
    ");
        printf("*1 创建链表;				*
    ");
        printf("*2 链表插入;				*
    ");
        printf("*3 链表删除;				*
    ");
        printf("*4 链表长度;				*
    ");
        printf("*5 链表是否为空;			*
    ");
        printf("*6 链表输出;				*
    ");
        printf("*7 链表销毁;				*
    ");
        printf("*0 程序退出;				*
    ");
        printf("*****************************************
    ");
    }
    void Creatlist_0(Linklist *l)
    {
        int i,n;
        Linklist p;
        char ch;
        printf("请输入单链表的长度:
    ");
        scanf("%d",&n);
        *l=(Linklist)malloc(sizeof(LNode));
        (*l)->next=NULL;
        for(i=0;i<n;i++)
        {
            printf("请输入链表中元素:
    ");
            p=(Linklist)malloc(sizeof(LNode));
            scanf("%c",&ch);
            if((ch=getchar())!='
    ')
            {
                p->data=ch;
                p->next=(*l)->next;
                (*l)->next=p;
            }
        }
        flag=1;
    }
    void Creatlist_1(Linklist *l)
    {
        int i,n;
        Linklist p,r;
        char ch;
        printf("请输入单链表的长度:
    ");
        scanf("%d",&n);
        *l=(Linklist)malloc(sizeof(LNode));
        (*l)->next=NULL;
        r=*l;
        for(i=0;i<n;i++)
        {
            printf("请输入链表中元素:
    ");
            p=(Linklist)malloc(sizeof(LNode));
            scanf("%c",&ch);
            if((ch=getchar())!='
    ')
            {
                p->data=ch;
                p->next=r->next;
                r->next=p;
                r=p;
            }
        }
        flag=1;
    }
    int Lengthlist(Linklist l)
    {
        int len=0;
        Linklist p=l->next;
        while(p)
        {
            len++;
            p=p->next;
        }
        return len;
    
    }
    void Insertlist(Linklist l,int i,char e)
    {
        int j;
        Linklist p=l,r;
        if(i<1||i>Lengthlist(l)+1)
            printf("无法插入!
    ");
        else
        {
            for(j=0;j<i-1;j++)
                p=p->next;
            r=(Linklist)malloc(sizeof(LNode));
            r->data=e;
            r->next=p->next;
            p->next=r;
        }
    }
    void Deletelist(Linklist *l,int i)
    {
        int j;
        Linklist p=*l,r;
        if(i<1||i>Lengthlist(*l))
            printf("无法删除!
    ");
        else
        {
            for(j=0;j<i-1;j++)
                p=p->next;
            r=p->next;
            p->next=r->next;
            free(r);
        }
    }
    void Emptylist(Linklist l)
    {
        if(flag==0)
            printf("链表未创建,不能执行判空操作!
    ");
        else if(l->next==NULL)
            printf("链表为空!
    ");
        else
            printf("链表不为空!
    ");
    }
    void Displaylist(Linklist l)
    {
        if(flag==0)
            printf("链表未创建,不能执行显示操作!
    ");
        else if(l->next==NULL)
            printf("链表为空!
    ");
        else
        {
            Linklist p=l->next;
            while(p)
            {
                printf("%c->",p->data);
                p=p->next;
            }
            printf("NULL
    ");
        }
    }
    void Destorylist(Linklist l)
    {
        Linklist p=l,q=l->next;
        while(q)
        {
            free(p);
            p=q;
            q=q->next;
        }
        free(p);
        flag=0;
    }
    int main()
    {
        Linklist l;
        int i,select;
        char e;
        while(1)
        {
            menu();
            printf("请输入命令号(0——7):
    ");
            scanf("%d",&select);
            switch(select)
            {
                case 1:
                    printf("请选择插入方法(0为头插法,1为尾插法):
    ");
                    while(scanf("%d",&i))
                    {
                        if(i==0||i==1)
                            break;
                        else
                        {
                            printf("输入不对,请重新输入(1为头插法,2为尾插法):
    ");
                            continue;
                        }
                    }
                    if(i==0)
                        Creatlist_0(&l);
                    else
                        Creatlist_1(&l);
                    break;
                case 2:
                    if(flag==1)
                    {
                        printf("请输入插入位置:
    ");
                        scanf("%d",&i);
                        printf("请输入插入的字符:
    ");
                        getchar();
                        scanf("%c",&e);
                        Insertlist(l,i,e);
                    }
                    else
                        printf("链表未创建,不能执行插入操作!
    ");
                    break;
                case 3:
                    if(flag==0)
                        printf("链表未创建,不能执行删除操作!
    ");
                    else
                    {
                        printf("请输入删除位置:
    ");
                        scanf("%d",&i);
                        Deletelist(&l,i);
                    }
                    break;
                case 4:
                    if(flag==0)
                        printf("链表未创建,不能计算长度!
    ");
                    else
                        printf("链表的长度为:%d
    ",Lengthlist(l));
                    break;
                case 5:
                    Emptylist(l);
                    break;
                case 6:
                    Displaylist(l);
                    break;
                case 7:
                    if(flag==0)
                        printf("链表未创建,怎么销毁?
    ");
                    else
                        Destorylist(l);
                    break;
                case 0:
                    exit(1);break;
                default :
                    printf("命令输入有误,请重新输入:
    ");
                    break;
            }
        }
        return 0;
    }
    </span>

  • 相关阅读:
    mybatis :xml文件中传入参数和if标签结合使用时要点
    mysql:查询数据库版本的几种方式
    http post 方法传递参数的2种方式
    深入理解mybatis参数
    Mybatis:动态sql
    Mybatis:传入参数方式以及#{}与${}的区别
    [GLSL]着色器周记02——火焰特效 【转】
    OpenGL ES入门09-GLSL实现常见特效 [转]
    RenderMonkey 练习 第五天 【OpenGL NormalMapping】
    反射向量 及 向量投影
  • 原文地址:https://www.cnblogs.com/abc-24990/p/4257538.html
Copyright © 2011-2022 走看看