函数介绍
- InsList---->在索引为i的位置插入元素e
- delete---->删除索引为i的元素
- GetData---->返回指定索引的元素
- Locate---->返回指定元素的索引
- Merge---->返回一个SeqList,通过两个升序SeqList合并而来
详细代码
#include <stdio.h>
#include <stdlib.h>
#define maxsize 20
typedef struct SeqList{
int elem[maxsize];
int last;
} SeqList;
int InsList(SeqList *L, int i, int e){
int k;
if((i<0) || (i>=L->last+2)){
printf("插入位置i值不合法");
return 0;
}
if(L->last>=maxsize-1){
printf("表已满无法插入");
return 0;
}
for(k=L->last;k>=i;k--){
L->elem[k+1]=L->elem[k];
}
L->elem[i]=e;
L->last++;
return 1;
}
int delete(SeqList *L,int index) {
if((index<0)||(index>L->last)){
printf("删除位置不合法!");
return 0;
}
int pop=L->elem[index];
for(int i=index;i<=L->last;i++){
L->elem[i-1]= L->elem[i];
}
L->last--;
}
int GetData(SeqList *L,int i) {
return L->elem[i];
}
int Locate(SeqList *L,int e) {
for (int i=0;i<L->last;i++) {
if(L->elem[i]==e) {
return i;
}
}
return -1;
}
SeqList Merge(SeqList *LA, SeqList *LB) {
SeqList LC;
int i=0,j=0,k=0;
while(i<=LA->last&&j<=LB->last) {
if(LA->elem[i]<=LB->elem[j]){
LC.elem[k]= LA->elem[i]; i++;
}else{
LC.elem[k]=LB->elem[j]; j++;
}
k++;
}
while(i<=LA->last){
LC.elem[k]= LA->elem[i]; i++; k++;
}
while(j<=LB->last){
LC.elem[k]= LB->elem[j]; j++; k++;
}
LC.last=k-1;
return LC;
}
void printSeqList(SeqList *L) {
for (int i=0;i<=L->last;i++) {
printf("%d ",L->elem[i]);
}
}
int main(void) {
SeqList L;
L.last=-1;
InsList(&L,0,1);
InsList(&L,1,1);
printSeqList(&L);
return 0;
}