单链表的增删查改(转贴)

    技术2022-05-20  54

    单链表的增删查改

    -

    -

    #include<stdio.h>

    #include<stdlib.h>

     

    typedef struct Node{

      char ch;

      struct Node * next;

    }Node,*Linklist;

     

    int num;

     

    //查找给定值的结点,返回结点指针

    Node * findValue(char c,Node * head){

      Node * p=head->next;

      while(p->next!=NULL){ 

        if(p->ch==c)

          return p;

         else

           p=p->next;

       }

       return head;

    }

     

    //查找给定位置的结点的值

    char findIndex_Value(Node * head,int index){

      int count=0;

      Node * p=head->next;

      for(int i=1;i<index;i++){

        p=p->next;

      }

      return p->ch;

    }

     

    //在给定位置插入一个结点

    void insertP(Node *head,int index){

      if(index<0||index>4+1){

        printf("插入操作非法/n");

      }else{

        Node *p=head;

        index--;

        while(p->next!=NULL&&index!=0){

          p=p->next;

          index--;

        }

        Node *s=(Node *)malloc(sizeof(Node));

        s->ch='j';

        s->next=p->next;

        p->next=s;

      }

    }

     

    //修改给定位置的结点值

    void setP(Node *head,int index){

      if(index<0||index>4+1){

        printf("操作非法/n");

      }else{

          Node *p=head;

          index--;

          while(p->next!=NULL&&index!=0){

            p=p->next;

            index--;

          }

          p->next->ch='g';

       }

    }

     

    //删除给定位置的结点

    void deleteP(Node *head,int index){

      if(index<0||index>4){

        printf("操作非法/n");

      }else{

       Node *p=head;

       index--;

       while(p->next!=NULL&&index!=0)

       {

        p=p->next;

        index--;

       }

       Node *s=p->next;

       p->next=s->next;

       s->next=NULL;

       free(s);

    }

    }

     

    //建立一个单链表

    Node * createLinkList(int num){

      char c;

      Linklist L=(Linklist)(malloc)(sizeof(Linklist));

      L->ch=NULL;

      L->next=NULL;

      Node * r=L;

      Node *s;

      for(int i=0;i<num;i++){

         s=(Node *)malloc(sizeof(Node));

         if(s==NULL){

          printf("不能分配空间/n");

          exit(0);

         }else{

         //printf("请输入第%d个节点值/n",i+1);

           switch(i){

             case 0:s->ch='a';break;

             case 1:s->ch='b';break;

             case 2:s->ch='c';break;

             case 3:s->ch='d';break;

           }

           //s->ch='a';

           r->next=s;

           r=s;

          }

      }

      r->next=NULL;

      return L; 

    }

     

    //输出单链表

    void procOutput(Node * L){

      Node * p=L->next;

      while(p->next!=NULL){

         printf("%c ",p->ch);

         p=p->next;

      }

      printf("/n");

    }

     

     

     

    int main(){

      Linklist L=createLinkList(5);

      Node * p1=findValue('c',L);

      printf("%c/n",p1->ch);

      char cha=findIndex_Value(L,3);

      printf("%c/n",cha);

      deleteP(L,3);

      procOutput(L);

      insertP(L,3);

      procOutput(L);

      setP(L,3);

      procOutput(L);

      return 0;

    }

     


    最新回复(0)