zoukankan      html  css  js  c++  java
  • 线性表——单链表的基本操作

    /**********************************************************
    *  单链表的存储结构定义 
    ***********************************************************/
    typedef struct LNode {
        ElemType data;
        struct LNode *next;
    } LNode, *LinkList;
    /**********************************************************
    *  单链表的基本操作的实现
    ***********************************************************/
    
    //创建并初始化为空表 
    Status InitList(LinkList &L)
    {     L=(LNode*)malloc(sizeof(LNode));
         if(L==NULL) return ERROR;
    	  L->next=NULL;
    	   return OK;
    }
    
    //销毁整个表(从此之后不再可用) 
    Status DestroyList(LinkList &L)
    {
        // TODO (#1#): 销毁表 
        return ERROR;
        //-------------------------------------
    }
    
    //将表L置空 
    Status ClearList(LinkList &L)
    {   L->next=NULL;
        return OK;
    }
    
    //判断表L是否为空表 
    bool ListEmpty(LinkList L)
    {   if(L->next==NULL) return true;
        return false;
        //-------------------------------------
    }
    
    //求表L的长度 
    int ListLength(LinkList L)
    {   LNode* p=L->next; 
        int j=0;
    	while(p||p!=NULL) 
    	{p=p->next;
    	 j++;
    	}
        return j;
    }
    
    //取表L中的第i个元素,并用e返回. 操作成功返回OK,失败时返回ERROR 
    Status GetElem(LinkList L, int i, ElemType &e)
    {   LNode* p=L->next;
        int j=1;
        while(p||j<i)
    	{ p=p->next;
    	   j++;
    	}
         if(!p||j>i) return ERROR;
    	   e=p->data;
    	   return OK;
        //-------------------------------------
    }
    
    //在表L中定位元素e首次出现的位置. 操作成功返回位序,失败时返回0 
    //    compare(a,b) 为比较函数,匹配时返回true,否则返回false 
    int LocateElem(LinkList L, ElemType e, bool (*compare)(ElemType,ElemType))
    {  int j=1;   
       LNode* p = L->next; 
       while(p!=NULL) {
          if( compare(p->data,e) )  return j;
            p=p->next;
    	    j++;
       }
           return 0;
    
    }
    
    
    //在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERROR
    Status ListInsert(LinkList &L, int i, ElemType e)
    {   LNode* p=L;
    	int j=0 ;
       while(p&&j<i-1)
       {p=p->next;
        j++;
       }
       if(!p||j>i-1) return ERROR;
       LNode* s=(LNode*)malloc(sizeof(LNode));
       s->data=e;
       s->next=p->next;
       p->next=s;
      return OK;
    }
    
    //删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR 
    Status ListDelete(LinkList &L, int i, ElemType &e)
    {    LNode* p=L->next;
       int j=1;
       while(p&&j<i-1)
       {p=p->next;
        j++;
       }
       if(!p||j>i-1) return ERROR;
       p->next=p->next->next;
       free(p);
       return OK;
    }
    
    //遍历表L,对每个元素调用visit(x). 
    Status ListTraverse(LinkList L, Status (*visit)(ElemType))
    {
        LinkList p = L->next;
        while ( p ) {
            if ( visit(p->data)==ERROR )  return ERROR;
            p = p->next;
        }
        return OK;
    }
    
  • 相关阅读:
    课后作业-阅读任务-阅读提问-3
    团队-团队编程项目作业名称-项目进度
    结对-结对编项目作业名称-测试过程
    结对-英文词频检测-开发过程
    20171002-构建之法:现代软件工程-阅读笔记2
    课后作业-阅读任务-阅读提问-2
    团队-团队编程项目作业名称-代码设计规范
    结队-结队编程项目作业名称-项目进度
    课后作业-阅读任务-阅读提问-1
    结队-贪吃蛇-项目进度
  • 原文地址:https://www.cnblogs.com/spsglz/p/7902517.html
Copyright © 2011-2022 走看看