• 插入链表的注意点(很基础但是很重要)


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

    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);  // 存储分配失败
  • 相关阅读:
    影响cpu性能的因素有哪些?
    linux系统中 SElinux安全子系统
    linux 系统中个人用户主页功能
    理解 Segmentation fault
    VI高级命令集锦
    How to be a Star 怎样成为明星?
    名词解释:DEADBEEF
    Unix还能走多远?
    Awk 实例,第 1 部分
    77年出生的朋友,你们过的还好吗?
  • 原文地址:https://www.cnblogs.com/qianyuesheng/p/12766328.html
Copyright © 2020-2023  润新知