zoukankan      html  css  js  c++  java
  • 数据结构链表源码

    数据结构链表源码

    数据结构链表源码,仅供自己复习专用。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    
    typedef struct Node{
        int data;
        struct Node *next;
    }node,*linklist;
    
    linklist List;
    
    int get(linklist L,int i)
    {
        int j=1;
        linklist p;
        p=L->next;
        while (p&&j<i)
        {
            p=p->next;
            ++j;
        }
        if(!p&&j>i)
        return -1;
        return (p->data);
    }
    
    int insert(linklist L,int i,int val)
    {
        int j=1;
        linklist p,s;
        p=L;
        while(p&&j<i)
        {
            p=p->next;
            ++j;
        }
        if(j>i||!p)
        return -1;
        s=(linklist)malloc(sizeof(node));
        s->data=val;
        s->next=p->next;
        p->next=s;
        return 1;
    }
    
    int Delete(linklist L,int i)
    {
        int j=1;
        linklist p,q;
        p=L;
        while(p->next&&j<i)
        {
            p=p->next;
            ++j;
        }
        if (!(p->next)||j>i)
        return -1;
        q=p->next;
        p->next=q->next;
        free(q);
        return 1;
    }
    
    void show(linklist L)
    {
        linklist p;
        p=L->next;
        while(p)
        {
            printf("%d ",p->data);
            p=p->next;
        }
        printf("
    ");
    }
    
    void InitList(void)
    {
        linklist head;
        head=(linklist)malloc(sizeof(node));
        List=head;
        List->next=NULL;
    }
    
    void rearcreat(linklist L,int i)
    {
        linklist p,t;
        p=(linklist)malloc(sizeof(node));
        t=L;
        while(t->next)
        {
            t=t->next;
        }
        t->next=p;
        p->data=i;
        p->next=NULL;
    }
    
    int length(linklist L)
    {
        int flag=0;
        linklist p;
        p=L->next;
        while(p)
        {
            p=p->next;
            flag++;
        }
        return flag;
    }
    int main()
    {
        int flag,tmp,n;
        InitList();
        printf("请输入一些数用以初始化链表(输入-1代表输入结束):
    ");
        while(~scanf("%d",&n))
        {
            if(n==-1)
            break;
            rearcreat(List,n);
        }
        printf("初始化链表后,其链表里面的元素为:
    ");
        show(List);
        printf("请输入相关操作指令(输入end表示操作结束):insert,show,delete,get,LinkList'sLength
    ");
        char s[50];
        memset(s,'',sizeof(s));
        while(~scanf("%s",s))
        {
            if(!strcmp(s,"end"))
            break;
            if(!strcmp(s,"insert"))
            {
                printf("请输入你想要插入的位置和值中间以空格隔开:
    ");
                int location,val;
                scanf("%d%d",&location,&val);
                tmp=length(List);
                if(tmp<location)
                printf("指针飘移,位置出错!!!
    ");
                else
                {
                	flag=insert(List,location,val);
                	if(flag==-1)
                    printf("指针飘移,位置出错!!!
    ");
                    else
                    {
                        printf("恭喜你!插入成功。
    插入成功后,链表元素为:");
                        show(List);
                    }
    			}
            }
            if(!strcmp(s,"delete"))
            {
                printf("请你想要删除的位置:
    ");
                int location;
                scanf("%d",&location);
                tmp=length(List);
                flag=Delete(List,location);
                if(tmp<location||flag==-1)
                printf("指针飘移,位置出错!!!
    ");
                else
                {
                    printf("恭喜你!删除成功。
    删除成功后,链表元素为:");
                    show(List);
                }
            }
            if(!strcmp(s,"get"))
            {
                printf("请你想要获取元素的位置:
    ");
                int location;
                scanf("%d",&location);
                tmp=length(List);
                if(tmp<location)
                printf("指针飘移,位置出错!!!
    ");
                else
                {
                	flag=get(List,location);
                	if(flag==-1)
                	printf("指针飘移,位置出错!!!
    ");
                	else
                    {
                        printf("恭喜你!获取成功:位置为 %d 的元素其值为 %d 。
    ",location,flag);
                    }
    			}
            }
            if(!strcmp(s,"show"))
            {
                printf("恭喜你!展示成功,链表元素为:
    ");
                show(List);
            }
            if(!strcmp(s,"LinkList'sLength"))
            {
                flag=length(List);
                printf("恭喜你!获取成功,链表长度为:%d
    ",flag);
            }
            memset(s,'',sizeof(s));
        }
        return 0;
    }
    
    
  • 相关阅读:
    EntityManager 实例化方法
    Java Jpa 规范
    Spring HandlerInterceptor
    Spring data jpa
    Spring Security @PreAuthorize 拦截无效
    Java ee el表达式
    脏读&幻读
    OR查询是否会使得索引失效?
    ThinkPHP中的parseDSN方法的坑记录一下
    js , map中的坑
  • 原文地址:https://www.cnblogs.com/Yqifei/p/12683683.html
Copyright © 2011-2022 走看看