• 线性表——单链表的基本操作


    /**********************************************************
    *  单链表的存储结构定义 
    ***********************************************************/
    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;
    }
    
  • 相关阅读:
    C++ crash 堆栈信息获取(三篇文章)
    qt捕获全局windows消息(使用QAbstractNativeEventFilter,然后注册这个类)
    qt之fillder抓包(QT网络版有一些具体的坑)
    qt之窗口换肤(一个qss的坑:当类属性发现变化时需要重置qss,使用rcc资源文件)
    模块化开发AraeRegistration
    CLR的组成和运转
    开源框架Caliburn.Micro
    URL
    负载均衡架构
    C add
  • 原文地址:https://www.cnblogs.com/spsglz/p/7902517.html
Copyright © 2020-2023  润新知