zoukankan      html  css  js  c++  java
  • 实现链表的初始化,按值查找,插入,删除

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #define OK   1
    #define ERROR  0
    #define TRUE 1
    #define FALSE 0
    typedef char ElemType;
    typedef struct Node    /*结点类型定义*/ 

     ElemType data;
     struct Node  * next;
    }Node, *LinkList; void init_linklist(LinkList *l)/*对单链表进行初始化*/
    {
     *l=(LinkList)malloc(sizeof(Node)); 
     (*l)->next=NULL;
    }
    void creatlianbiao(LinkList L)
    {
     Node *s;
     char c;
     int flag=1;
     while(flag)
     {
      c=getchar();
      if(c!='@')
      {
       s=(Node*)malloc(sizeof(Node)); //建立新节点
       s->data=c;
       s->next=L->next; //将s节点插入表头
       L->next=s;
      }
     else flag=0;
     }
    }
    Node *Search(LinkList L,ElemType e)  // 按值查找
    {
      Node *p;
      p=L->next;
      while(p!=NULL)
      {
         if(p->data!=e)
      {
       p=p->next; // 指向下一个节点
      }
      else break;
      }
       return p;
    }
    int InsList(LinkList L,int i,ElemType e) // 在带头节点的单链表中第i个位置插入值为e的新节点
    {
      Node *pre,*s;
      pre=L;      
      int k=0;
      if(i<0)
       return ERROR;
      while(pre!=NULL&&k<i-1)
      {
       pre=pre->next;
       k=k+1;
      }
      if(!pre)  // 相当于pre=null
      {
      printf("插入的位置不合法!");
      return ERROR;
      }
      s=(Node*)malloc(sizeof(Node)); // 为e申请一个新的节点并由s指向它
         s->data=e;
      s->next=pre->next;
      pre->next=s;
      return OK;
    }
    int DelList(LinkList L,int i,ElemType *e )
    {
       Node *pre,*r;
       int k=0;
       pre=L;
       while(pre!=NULL&&k<i-1)
       {
          pre=pre->next;
       k=k+1;
       }
       if(!(pre->next))
       {
        printf("删除的位置不合理!");
        return ERROR;
       }
       r=pre->next;
       pre->next=r->next;
       *e=r->data;
       free(r);
       return OK;
    }
    void main()
    {
       LinkList l;
     Node *p;
     char c;
     char *d;
     init_linklist(&l);
     printf("用头插法建立单链表,请输入链表数据,以@结束! ");
     creatlianbiao(l);
     p=l->next;
     while(p!=NULL)
     {
      printf("%c",p->data);
      p=p->next;
     }
     printf("请输入要查找的元素值: ");
     fflush(stdin);   //清空输入缓冲区
     scanf("%c",&c);
     p = Search(l,c);
     if(p!=NULL)
      printf("该结点的值为:%c ",p->data);
     else
      printf("未找到此结点! ");
     int flag=0;
     int i;
     printf("请输入插入的位置和元素: ");
     scanf("%d,%c",&i,&c);
     flag=InsList(l, i, c);
     if(flag)
      printf("插入操作成功! ");
     else
      printf("插入操作失败! ");
     p = l->next;
     while(p!=NULL)
     {
      printf("%c",p->data);
      p=p->next;
     }
     printf(" 请输入被删元素的位置:");
     scanf("%d",&i);
     d= (char*)malloc(sizeof(char));
     DelList(l,i,d);
     printf("被删除的元素是:%c ",*d);
     p = l->next;
     while(p!=NULL)
     {
      printf("%c",p->data);
      p=p->next;
     }
        printf(" ");
    }

    原csdn博客地址:http://blog.csdn.net/sha_520/article/details/7350727

  • 相关阅读:
    2. Get the codes from GIT
    1. Install Git and GitExtension
    [Git]Git的常用命令
    测试用例Excel模板For Quality Center
    测试用例excel模板
    如何在win 2008 server和win 7上add web site
    Jmeter运行过程中如何让Fiddler同时可以抓获到服务器的应答报文
    Windows系统文件mshtml.dll
    Jmeter中的XPath Assertion
    AIM Tech Round (Div. 2) B
  • 原文地址:https://www.cnblogs.com/viaiu/p/4806219.html
Copyright © 2011-2022 走看看