zoukankan      html  css  js  c++  java
  • 插入链表的注意点(很基础但是很重要)

    来源于严蔚敏的数据结构链表插入:

    Status ListInsert.Sq(SqList &L, int i, ElemType e) {
    	// 在顺序表L中第i个位置之前插入新的元素e
    	// i 的合法值在 1 <= i <= ListLength.Sq(L) + 1
    	if (i < 1 || i > L.length + 1) return ERROR;  // i 值不合法
    	
    	if (L.length >= L.Listsize) {      // 当前存储空间已满,增加分配
    		newbase = (ElemType *) realloc(L.elem, (L.listsize + LISTINCREMENT) sizeof(ElemType);
    		
    		if (!newbase) exit(OVERFLOW);  // 存储分配失败
    		L.elem = newbase;              // 新的基址
    		L.listsize += LISTINCREMENT;   // 增加存储容量
    	}
    	
    	q = &(L.elem[i - 1]);              // q 为插入位置
    	for(p = &(L.elem[L.length - 1]); p >= q; --p) {
    		*(p + 1) = *p;		
    	}
    	
    	*q = e;      // 插入e的值
    	++L.length;  // 表长增1
    	return OK;
    }

    如果为原先的链表插入一个值,需要考虑以下几点:

    (1)插入的位置 i 是否合法,是否在 链表的长度范围之内;

    if (i < 1 || i > L.length + 1) return ERROR;  // i 值不合法

    (2)根据语言的结构,判断是否需要写重新增加的结点结构;

    if (L.length >= L.Listsize) {      // 当前存储空间已满,增加分配
    		newbase = (ElemType *) realloc(L.elem, (L.listsize + LISTINCREMENT) sizeof(ElemType);
    		// .......
    }

    (3)接(2),如果需要新增结点结构,判断是否分配成功;

    if (!newbase) exit(OVERFLOW);  // 存储分配失败
  • 相关阅读:
    MySQL之PXC集群
    MySQL大表查询未走索引异常分析
    Redis场景应用之UA池
    MySQL日志剖析
    Redis场景应用之排行榜
    MySQL B+树索引解析
    Redisson分布式锁剖析
    关键字替代符号C++
    并查集按秩合并
    POJ3048
  • 原文地址:https://www.cnblogs.com/qianyuesheng/p/12766328.html
Copyright © 2011-2022 走看看