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

    链表中的每个结点只有一个指针域,我们将这种链表称为单链表。 
    头指针(head):指向链表第一个结点。
    最后一个结点指针域为空。
    结点可以连续存储,也可以不连续存储.
    结点的逻辑顺序与物理顺序可以不一致.
     
    //单链表的存储结构描述
    typedef struct Node // 结点类型定义
    {
        //ElemType 具体类型据实际设定, 如int,char等
        ElemType data;
        struct Node * next; 
    }Node, *LinkList;//LinkList为结构指针类型
     
    //初始化单链表
    InitList(LinkList *L)
    {
        *L = (LinkList)malloc(sizeof(Node));
        (*L)->next=NULL;
    }
     
    //头插法
    void CreateFromHead(LinkList L)
    {
        Node *s;
        int flag=1;//标志--初值为1,当输入‘$’时,flag为0,建表结束
        while(flag)
           { c=getchar();//接收一字符
             if(c!=’$’) //如果字符不是‘$’,则执行头插
                {
                    s=(Node *)malloc(sizeof(Node));
                    s->data=c;
                    s->next=L->next;
                    L->next=s;
                }
            else
               flag=0;
         } 
    }
     
    //尾插法
    void CreateFromTail(LinkList L)
    {
          Node *r, *s;
          int flag=1;//标志--初值为1,当输入“$”时,flag为0,建表结束
          r=L;
          while(flag)
             { c=getchar();//接收一字符
               if(c!=’$’) //如果字符不是’$’,则执行尾插
                   {
                      s=(Node *)malloc(sizeof(Node));
                      s->data=c;
                      r->next=s;
                      r=s;
                   }
             else
                {
                     flag=0;
                     r->next=NULL;
                 }
             } 
    }
     
    //单链表插入操作
    void InsList(LinkList L,int i,ElemType e)/*在带头结点的单链表L中第i个结点之前插入值为e的新结点。 */
          Node *pre,*s;
          int k;
          if(i<1) return Error;
             pre=L; k=0;
         while(pre!=NULL&&k<i-1)
               { pre=pre->next; k=k+1; }
          if(!pre)
              { printf(“插入位置不合理!”); return Error; }
          s=(Node*)malloc(sizeof(Node)); //为e申请一个新的结点
          s->data=e; /*将待插入结点的值e赋给s的数据域*/
          s->next=pre->next;
          pre->next=s;
         return OK;
    }
     
    //单链表删除
    void DelList(LinkList L,int i,ElemType *e)
    {
         Node *pre,*r;
         int k;
         pre=L; k =0;
         while(pre->next!=NULL&&k<i-1)
            { pre=pre->next; k=k+1; }
        if( !(pre->next) )
            {
                 printf(“删除结点的位置i不合理!”);
                return ERROR;
             }
        r=pre->next;
        pre->next=pre->next->next /*删除结点r*/
        e = r->data;
        free(r); return OK;
    }
     
    //按序号查找
    Node * Get(LinkList L, int i)/*在带头结点的单链表L中第i个结点之前插入值为e的新结点。 */
    {
         int j;
         Node *p;
         if(i<=0)
         return NULL;
         p=L;j=0; / * 从头结点开始扫描 * /
         while ( (p->next!=NULL)&&(j<i) )
            { p=p->next;
              j++;
            }
         if(i= =j)return p; / * 找到了第i个结点 * /
         else return NULL; / * 找不到,i>n * /
    }
     
    //按值查找
    Node *Locate( LinkList L,ElemType key)/ * 在带头结点的单链表L中查找其结点值等于key的结点,若找到则返回该结点的位置p,否则返回NULL * /
    {    Node *p;
         p=L->next; / * 从表中第一个结点比较 * /
         while (p!=NULL)
         if (p->data!=key)
            p=p->next;
         else
              break; / * 找到结点key,退出循环 * /
         return p;
    }
     
    //单链表的长度
    int ListLength(LinkList L) /*L为带头结点的单链表*/
    {
        Node *p;
        p=L->next;
        j=0; /*用来存放单链表的长度*/
        while(p!=NULL)
          { p=p->next;
            j ++;
          }
        return j;
    }
  • 相关阅读:
    java如何得到GET和POST请求URL和参数列表
    Java中,当表单含有文件上传时,提交数据的如何读取
    图片文件,图片文件流和BASE64加密字符串之间的转换,以及图片的BASE64加密字符串再jsp上如何显示
    Multipart/form-data POST文件上传详解(转)
    如何控制微信分享网页时,展示的标题,描述和图片
    微信的分享功能(针对web手机站页面进行的分享功能)
    关于linux下内存使用的一些疑惑[转载]
    【转】《高级前端3.6》JavaScript多线程——Concurrent.Thread.js, WebWork
    【转】javascript中的LHS与RHS
    [转] linux系统中如何进入退出vim编辑器,方法及区别
  • 原文地址:https://www.cnblogs.com/lxzw/p/12890827.html
Copyright © 2011-2022 走看看