C++ 对 线性数组的 删除 和 插入操作

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define List_init_size 100
#define Listincrement 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2


struct Sqlist
{

 char *elem;

 int length;

 int listsize;

};

int InitList(Sqlist *l)
{
 l->elem=(char *)malloc(List_init_size*sizeof(char));

 if(!l->elem)
 {
  printf("Malloc Error!/n");
  exit(OVERFLOW);
 }

 l->length=0;

 l->listsize=List_init_size;

 return OK;

};

int ListInsert(Sqlist *l,int i,char e)
{
  char *newbase;

  char *q,*p;

  // 在顺序线性L中第i个位置之前插入新的元素

  if(i<1||i>l->length+1)

   return ERROR;

  if(l->length>=l->listsize)

  {

  newbase=(char *)realloc(l->elem,(Listincrement+List_init_size)*sizeof(char));

  if(!newbase)

   if(!newbase)

    l->listsize+=Listincrement;

   }

  q=&(l->elem[i-1]);

  for(p=&(l->elem[l->length-1]);p>=q;--p)

   *(p+1)=*p;

  *q=e;

  ++l->length;

  return OK;
}


int ListDel(Sqlist *l,int i,char *e)//在顺序线性L中删除第i个元素,并用e返回其值
{
 char *p,*q;

 if(i<1||i>l->length)

  return ERROR;

 p=&(l->elem[i-1]);

 *e=*p;

 q=(l->elem)+(l->length)-1;

 for(++p;p<=q;++p)

  *(p-1)=*p;

 --l->length;

 return OK;

}

void print(Sqlist *l)
{
 int i;
 for(i=0;i<l->length;i++)
  printf("%c/n",l->elem[i]);
}

int main()
 {
 Sqlist l;

 char elem;

 InitList(&l);

 ListInsert(&l,1,'a');

 ListInsert(&l,2,'b');

 print(&l);

 ListDel(&l,1,&elem);

 printf("Del:%c/n",elem);

 print(&l);

 return OK;

   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值