newbase=(elemtype*)realloc
时间: 2023-04-29 12:00:34 浏览: 352
(newbase, newmax*sizeof(elemtype));
这是一个动态内存分配函数,用于重新分配已经分配过的内存空间。其中,newbase是指向重新分配后的内存空间的指针,elemtype是数据类型,newmax是重新分配后的内存空间大小。realloc函数会将原来分配的内存空间大小改变为newmax*sizeof(elemtype),并将原来的数据复制到新的内存空间中。如果newbase为NULL,则realloc函数会分配newmax*sizeof(elemtype)大小的内存空间。如果realloc函数无法分配足够的内存空间,则返回NULL。
相关问题
下面算法功能是:在顺序表中,第i个元素前插入元素e。请将算法补充完整。#include<stdio.h>#include <math.h>#include <stdlib.h> #define LIST INIT SIZE 100#define LISTINCREAMENT 10 typedef int ElemType; typedef struct{ ElemType *elem; int length; int listsize;}SqList; bool ListInsert Sq(SqList &L, int i, ElemType e){ ElemType *p,*q; if(i<1|li>L.length+1) { printf"插入位置不正确!"); return false: if(L.length >= L.listsize) ElemType*newbase(ElemType*)realloc(L.elem,(LIST INITSIZE+LISTINCREAMENT)*sizeof(ElemType)) if!newbase) { printf("overflow!"); return false;} L.elem=newbase; L.listsize+=LISTINCREAMENT; /*将第i到第n个元素向后移动一位,将e插入到第i个元素的位置,表长增 1*1 return true;}
算法补充完整如下:
```
bool ListInsert(SqList &L, int i, ElemType e){
ElemType *p,*q;
if(i<1 || i>L.length+1) {
printf("插入位置不正确!");
return false;
}
if(L.length >= L.listsize) {
ElemType *newbase = (ElemType*)realloc(L.elem,(LISTINITSIZE+LISTINCREAMENT)*sizeof(ElemType));
if(!newbase) {
printf("overflow!");
return false;
}
L.elem = newbase;
L.listsize += LISTINCREAMENT;
}
q = &(L.elem[i-1]);
for(p = &(L.elem[L.length-1]); p>=q; --p) {
*(p+1) = *p;
}
*q = e;
++L.length;
return true;
}
```
具体思路:
- 判断插入位置是否正确,如果不正确则返回 false。
- 如果当前顺序表已满,则重新分配更大的空间。
- 将第 i 到第 n 个元素向后移动一位,腾出第 i 个元素的位置。
- 将元素 e 插入到第 i 个元素的位置。
- 表长增加 1,返回 true。
在顺序表L中第i个位置上插入一个新的元素e: Status ListInsert_Sq(SqList &L , int i , ET e){ if ( i<1 || i>L.length+1) return ERROR; if(L.length >= L.listsize){ p=(ET*)realloc(L.elem,(L.listsize+10)*sizeof(ET)); if (p==NULL) exit(OVERFLOW); L.elem=p; } for( j=L.length ; j>=i ; --j ) L.elem[j]=e ; return OK; }
*L, int i, ElemType e) {
int j;
if (i < 1 || i > L->length + 1)
return ERROR;
if (L->length >= L->listsize) {
ElemType *newbase = (ElemType *)realloc(L->elem,
(L->listsize + LISTINCREMENT) * sizeof(ElemType));
if (!newbase)
exit(OVERFLOW);
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
for (j = L->length; j >= i; --j)
L->elem[j] = L->elem[j - 1];
L->elem[i - 1] = e;
++L->length;
return OK;
}
注意,这是一段C语言的代码,用于将一个元素插入到顺序表L的第i个位置上。