1) 插入操作
在顺序表L的第i (1<=L.length+1)个位置插入新元素e。如果i的输入不合法,则返回false,表示插入失败;否则,将顺序表的第i个元素以及其后的元素右移一个位置,腾出一个空位置插入新元素e,顺序表长度增加1,插入成功,返回true。
bool ListInsert(SqList &L, int i, ElemType e){
//本算法实现将元素e插入到顺序表L中第i个位置
if ( i<1 || i>L.length+1 )
return false; // 判断i的范围是否有效
if(L.length>=MaxSize)
return false; // 当前存储空间已满,不能插入
for (int j =L.length; j >=i; j--) // 将第i个位置及之后的元素后移
L.data[j]=L.data[j-l];
L.data[i-1]=e; //在位置i处放入e
L.length++; //线性表长度加1
return true;
}
复制纯文本新窗口
bool ListDelete(SqList &L,int i, int &e){
//本算法实现删除顺序表L中第i个位置的元素
if(i<1 || i>L.length)
return false; // 判断i的范围是否有效
e=L.data[i-1] ; // 将被删除的元素赋值给e
for (int j=i; j
L.data[j-1]=L.data[j];
L.length--; //线性表长度减1
return true;
}
int LocateElem(SqList L, ElemType e){
//本算法实现查找顺序表中值为e的元素,如果查找成功,返回元素位序,否则返回0
int i;
for(i=0;i
if(L.data[i]==e)
return i+1; // 下标为i的元素值等于e,返回其位号i+1
return 0; //退出循环,说明查找失败
}
typedef struct LNode{ //定义单链表结点类型
ElemType data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
图2-4? 头插法建立单链表
头插法建立单链表的算法如下:
LinkList CreatList1(LinkList &L){
//从表尾到表头逆向建立单链表L,每次均在头结点之后插入元素
LNode *s;int x;
L=(LinkList)malloc(sizeof(LNode)); //创建头结点
L->next=NULL; //初始为空链表
scanf("%d", &x); //输入结点的值
while(x!=9999) { //输入 9999 表示结束
s=(LNode*)malloc(sizeof(LNode) ); //创建新结点
s->datax;
s->next=L->next; //重点(如果使用头插法的话)
L->next=s; //将新结点插入表中,L为头指针
scanf ("%d", &x);
} //while 结束
return L;
}
图2-5? 尾插法建立单链表
尾插法建立单链表的算法如下:
LinkList CreatList2(LinkList &L){
//从表头到表尾正向建立单链表L,每次均在表尾插入元素
int x; // 设元素类型为整型
L=(LinkList)malloc(sizeof(LNode));
LNode *s, *r=L; //r 为表尾指针
scanf ("%d", &x); //输入结点的值
while (x!=9999) { //输入 9999 表示结束
s=(LNode *)malloc(sizeof(LNode));
s->data=x; //重点
r->next=s;
r=s; //r指向