zoukankan      html  css  js  c++  java
  • 单链表

      我去终于做出来了  不是难  是前面的东西学的不扎实导致有的东西理解的不到位

         又恶补了一下  终于做出来了   世上无难事,只怕有心人。光改错就好几就   想放弃的时候

       想一想问什么别人可以做出来 你为什么不行。。。多琢磨下  画画图  估计每个学过c语言的同学都可以做出来 

    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    typedef struct node
    {
    int data;
    struct node *next;
    } lnode,*linklist;


    linklist creat( void)
    { int n,k,i;
    linklist l,p,r;
    l=(linklist)malloc(sizeof(lnode));
    if( l==NULL)
    {
    printf("内存分配失败");
    exit(-1);
    }

    l->next=NULL;
    r=l;


    printf("请输入链表共有数字:");
    scanf("%d",&n) ;
    for( i=0;i<n;i++)
    {
    p=(linklist)malloc(sizeof(lnode));

    if( p==NULL)
    {
    printf("内存分配失败");
    exit(-1);
    }
    printf("链表的值:");
    scanf("%d",&p->data);

    r->next=p;
    p->next=NULL;
    r=p;
    }


    return l;

    }

    int insert(linklist l,int i,int x)
    {

    linklist p,s;
    p=l;int j=1;
    while(p!=NULL&&j<i)
    {
    p=p->next;
    j++;
    }
    if(!p||j>i)
    return 0;
    else{
    s=(linklist)malloc(sizeof(lnode));
    s->data=x;
    s->next=p->next;
    p->next=s;

    }
    return 0;
    }

    int del(linklist l,int i,int x)
    //LinkList&L 是引用传递 可以起到修改链表的效果
    //LinkList L 是值传递 传的是L的一个副本 对副本操作后无法起到修改链表的效果
    {
    linklist p,q;
    p=l;
    int j=0;
    while(p&&j<i){
    p=p->next;
    j++;
    }
    if(!(p||j>i))
    return 0;

    q=p->next;
    p->next=q->next;
    x=q->data;
    free(q);
    return 0;

    }

    int len(linklist l)
    {
    linklist p;
    int j=0;
    p=l->next;
    while(p!=NULL)
    { j++;
    p=p->next;

    }
    printf("链表长度为:%d",j);
    return 0;
    }


    int clear(linklist l)
    {
    linklist q,p;
    int j=0;
    p=l->next;
    while(p!=NULL)
    {
    q=p->next;
    l->next=q;
    free(p);
    p=q;

    }
    l->next=NULL;

    }


    void print(linklist l)
    {
    linklist p,r,s;
    p=l->next;
    while(p!=NULL)//链表不为空
    {
    printf("%d ",p->data );
    p=p->next;

    }
    printf(" ");
    }
    int main()
    {
    linklist l,p,s;
    int x,n,i,choose;
    l=(linklist)malloc(sizeof(lnode));
    l->next=NULL;
    l->data=-1;
    l=creat();
    print(l);
    printf("请输入操作: ");
    printf("输入操作1:length ");
    printf("输入操作2:insert ");
    printf("输入操作3: delete ");
    printf("输入操作4:clear ");
    while(scanf("%d",&i)){

    switch(i)
    {
    case 1: len(l);
    break;

    case 2: insert(l,2,2);print(l);
    break;

    case 3:del(l,2,2); print(l);
    break;

    case 4:clear(l);print(l);
    break;

    default :printf("error");
    }

    }

    return 0;
    }

  • 相关阅读:
    蓝桥杯训练 2n皇后问题
    AtCoder Grand Contest #026 B
    AtCoder Grand Contest #026 A
    AtCoder Beginner Contest 103
    7-26 单词长度(15 分)
    uva 10006 Carmichael Numbers
    java并发带返回结果的批量任务执行(CompletionService:Executor + BlockingQueue)
    并发容器之CopyOnWriteArrayList
    模板模式
    静态工具类中使用注解注入service
  • 原文地址:https://www.cnblogs.com/mykonons/p/5861830.html
Copyright © 2011-2022 走看看