线性表--顺序存储
代码来自《大话设计模式》
#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef int ElemType;
typedef struct {
ElemType data[MAXSIZE];
int length;
}SqList;
Status visit(ElemType c){
printf("%d ",c);
return OK;
}
Status InitList(SqList *L){
L->length = 0;
return OK;
}
Status Clearlist(SqList *L){
L->length = 0;
return 0;
}
Status ListEmpty(SqList L){
if(L.length == 0){
return TRUE;
}
return FALSE;
}
int ListLength(SqList L){
return L.length;
}
Status GetElem(SqList L,int i,ElemType *e){
if(L.length == 0 || i<1 || i>L.length){
return ERROR;
}
*e = L.data[i-1];
return OK;
}
int LocateElem(SqList L,ElemType e){
int i;
if(L.length == 0){
return 0;
}
for(i = 0; i < L.length; i++){
if(L.data[i]==e){
break;
}
}
if(i>=L.length){
return 0;
}
return i+1;
}
Status ListInsert(SqList *L,int i,ElemType e){
int k;
if(L->length == MAXSIZE){
return ERROR;
}
if(i<1 || i > L->length+1){
return ERROR;
}
if(i <= L->length){
for(k = L->length; k >= i; k--){
L->data[k] = L->data[k-1];
}
}
L->data[i-1] = e;
L->length++;
return OK;
}
Status ListDelete(SqList *L,int i,ElemType *e){
int k;
if(L->length == 0){
return ERROR;
}
if(i < 1 || i > L->length){
return ERROR;
}
*e = L->data[i-1];
if(i < L->length){
for(k = i-1; k < L->length-1; k++){
L->data[k] = L->data[k+1];
}
}
L->length--;
return OK;
}
Status listTraverse(SqList L){
int i;
for(i = 0; i < L.length; i++){
visit(L.data[i]);
}
printf("\n");
return OK;
}
Status unionList(SqList *La,SqList Lb){
int len_a,len_b,i;
ElemType e;
len_a = ListLength(*La);
len_b = ListLength(Lb);
for(i = 1; i <= len_b; i++){
GetElem(Lb,i,&e);
if(!LocateElem(*La,e)){
ListInsert(La,++len_a,e);
}
}
return OK;
}
int main(){
SqList La;
SqList Lb;
ElemType e;
Status i;
int j,k;
i=InitList(&La);
printf("初始化La后:La.length: %d\n",La.length);
for(j = 1; j <= 5; j++){
ListInsert(&La,j,j*2);
}
printf("遍历La:");
listTraverse(La);
printf("La.length:%d\n",La.length);
i=ListEmpty(La);
printf("La是否为空:%d\n",i);
i = Clearlist(&La);
printf("清空后:La.length:%d\n",La.length);
i = ListEmpty(La);
printf("L是否为空:%d\n",i);
for(j=0;j<10;j++){
ListInsert(&La,j+1,j*3);
}
printf("重新插入La后:");
listTraverse(La);
ListInsert(&La,5,99);
printf("在第5个位置插入元素后:");
listTraverse(La);
printf("插入之后的La.length:%d\n",La.length);
GetElem(La,5,&e);
printf("第5个元素值为:%d\n",e);
printf("元素为12的位置:%d\n",LocateElem(La,12));
ListDelete(&La,5,&e);
printf("删除第5个元素 %d\n",e);
printf("之后的La为:");
listTraverse(La);
i = InitList(&Lb);
for(j=0;j<=5;j++){
ListInsert(&Lb,j+1,j*6);
}
printf("Lb:");
listTraverse(Lb);
unionList(&La,Lb);
listTraverse(La);
return 0;
}
如需转载,请注明文章出处,谢谢!!!
浙公网安备 33010602011771号