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);  // 存储分配失败
  • 相关阅读:
    Confluence 6 在升级过程中查看合并日志
    Confluence 6 从 WIKI 标记整合到基于 XHTML 的存储格式
    Confluence 6 升级完成后的检查
    Confluence 6 超过当前许可证期限进行升级
    HDU2571--命运---DP
    HDU 2084 DP经典例子---数塔问题
    紫书第二章
    求组合数
    欧拉函数
    二分幂/快速幂
  • 原文地址:https://www.cnblogs.com/qianyuesheng/p/12766328.html
Copyright © 2011-2022 走看看