C语言数据结构_向顺序表中插入元素

创建一个静态的顺序表Sqlist[Maxsize]后,向该静态顺序表中第i个位置插入元素item的代码如下:

void InsertElem(ElemType Sqlist[], int &n, int i, ElemType item){
    //向顺序表Sqlist中第i个位置插入元素item,该顺序表原长度为n
    int t;
    if(n == MaxSize || i < 1 || i > n+1)
        exit(0);	//非法插入
    for(t=n-1; t>=i-1; t--)		
        Sqlist[t+1] = Sqlist[t];		//将i-1以后的元素顺序后移一个元素的位置
    Sqlist[i-1] = item;		//在第i个位置上插入元素item
    n = n+1;	//表长加1
}

函数InsertElem()的作用是在顺序表中第i个位置插入元素item,并将顺序表的长度增加1。其实现过程如下:

(1)判断插入元素的位置是否合法。一个长度为n的顺序表的可能插入元素的位置是1~n+1,因此如果i<1或者i>n+1,或者表已满,即n==MaxSize的插入都是非法的。

(2)将顺序表的i-1以后的元素顺序后移一个元素的位置,即:将顺序表从第i个元素到第n个元素顺序后移一个元素的位置。

(3)在表的第i个位置(下标是i-1)上插入元素item,并将表长加1。

创建一个动态的顺序表L后,向该动态生成的顺序表中第i个位置插入元素item的代码如下:

void InsertElem(Sqlist *L,int i,ElemType item)
{
  /*向顺序表L的第i个位置插入元素item*/
  ElemType *base,*insertPtr,*p;
  if(i<1 || i>L->length+1) exit(0);		//非法插入
  if(L->length>=L->listsize)
  {
      base=(ElemType*)realloc(L->elem,(L->listsize+100)*sizeof(ElemType));
      /*重新追加空间*/
      L->elem=base;
      L->listsize+=100;
  }
  insertPtr=&(L->elem[i-1]);
  for(p=&(L->elem[L->length-1]);p>=insertPtr;p--)  /*将i-1个位置以后的元素顺序向后移一个位置*/
      *(p+1)=*p;
  *insertPtr=item;
  L->length++;
}
上一篇:Eclipse Android 代码自动提示功能


下一篇:数据结构4——linuxC(二叉树和排序算法)