1..插入 :在顺序线性表l的第i个位置前插入元素e 。
- 第一步判断插入位置是否合法,如果不合法则异常退出。
- 第二步判断线性表存储空间是否不足,如果不足则增加存储容量。
- 第三步将插入位置及之后元素后移。第四步将待插入元素插入。
2..删除:从顺序线性表l中删除第i个元素,并用e返回其值 。
- 第一步判断删除位置是否合法,如果不合法则异常退出。
- 第二步将待删除位置元素的值赋于e。
- 第三步将被删除之后的元素左移 。
代码实现:
//插入,删除操作
#include<>
#include <> //定义杂项函数及内存分配函数
#include<iostream>
using namespace std;
typedef int elemtype;//将int起别名为 elemtype
//线性表的动态分配顺序存储结构
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 2 //线性表存储空间的分配增量
typedef struct
{
elemtype *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
} sqlist;
//插入操作
elemtype listinsert(sqlist &l,int i ,elemtype &e)
{
if(i<1||i>+1)
return 1; //i值不合法
if(>=)//当前存储位置已满,增加分配
{elemtype *newbase;
newbase=(elemtype *)malloc((+LISTINCREMENT)*sizeof(elemtype));
if(!newbase)//存储分配失败
{
cout<<"存储分配失败";
exit(1);//存储分配失败 ,1为异常退出
}
for(int j = 0 ; j < ; j++)
newbase[j] = [j];//给各元素赋值
=newbase;//首地址赋值
+= LISTINCREMENT;//增加存储容量,为一个elemtype型元素所占内存
}
//newbase=(elemtype *)realloc(,((+LISTINCREMENT)*sizeof(elemtype)));
elemtype *q,*p;
q = &([i-1]);//q为插入地址
for(p=&([-1]);p>=q;p--)//插入位置及之后的元素后移一个位置
*(p+1)=*p;
*q=e;//插入e
++;//表长增加1
cout<<"插入元素后:";
for(int i = 0 ; i < ; i++)
cout<<[i]<<" ";
cout<<endl;
return 0;
}
//删除操作。从顺序线性表l中删除第i个元素,并用e返回其值
elemtype listdelete(sqlist &l,int i,elemtype *e)
{
if(i<1||i>+1)
return 1; //i值不合法
int *p,*q;
p=&([i]);//p为删除元素地址
e=p;
cout<<"被删除值的值为:"<<*e<<endl;
q=+-1;//表尾元素位置
for(p++;p<=q;p++)//被删除之后的元素左移 注意初始值为p++
*(p-1)=*p;
--;//表长减1
cout<<"删除元素后:";
for(int i=0;i<;i++)
cout<<[i]<<" ";
cout<<endl;
return 0;
}
int main()
{
sqlist l;
elemtype b[]={1,4,5,6};
=b;
=sizeof(b)/sizeof(elemtype);
=sizeof(elemtype)*;
elemtype e,d;
e = 9;//待插入元素的值
cout<<"原序列:" ;
for(int i=0;i<;i++)
cout<<[i]<<" ";
cout<<endl;
listinsert(l,2,e);
listdelete(l,3,&d);
}
//int *p;
//p=&([i]);
//
//与int *p=&([i]);含义相同
运行结果: