2011年2月4日 1.顺序表线性表的顺序存储结构 ·定义结构体以及相关宏 typedef struct{ ElemType *elem;//存储空间地址 int length;//当前长度(即已经使用的) int listsize;//当前分配的链表容量 }SqList; typedef int Status; typedef int ELemType; #define OK 1 #define ERROR -1 #define MAX_SIZE 100 ·初始化 1.执行【分配内存空间】,开辟一段大小为MAX_SIZE*sizeof(ElemType)大小的内存空间. 2.若分配成功(首地址不为空),则设置【当前长度】为0,【存储容量】为MAX_SIZE。 Status Init_SqList(SqList &L) { L.elem=(ElemType *)malloc(MAX_SIZE*sizeof(ElemType)) if(!L.elem) return ERROR; else { L.length=0; L.listsize=MAX_SIZE; return OK; } } 2011.02.21 ·插入(参数i为个数,不为下标) 1.如果插入位置小于0或者大于最大空间,无效位置; 2.如果当前长度已经大于等于可分配的空间,无法再添加元素 3.先从最后位(下标为L->length-1)开始从后往前一次后移一位,直到第i个(下标为i-1)移到后一位为止。 Status Insert_SqList(Sqlist *L,int i,ElemType e) { int j; if(i<1||i>L->length-1) return ERROR; if(L->length>=MAX_SIZE) { printf("不可添加新元素,已到最大值"); return ERROR; } for(j=L->length-1;j>=i-1;--j) L->Elem_array[j+1]=L->Elem_array[j]; L->Elem_array[i-1]=e; return OK; } 函数名称:List_Delete 函数功能:删除元素 1 检查下标 2 前移 3 改长度 ---------------------------------------------------------*/ Status List_Delete(SqList *L,int i) { int j; if(i<1||i>L->length) return ERROR; for(j=i-1;j<=L->length-2;j++) *(L->elem+j)=*(L->elem+j+1); --L->length; } /*-------------------------------------------------------- 函数名称:List_Search 函数功能:查找元素 ---------------------------------------------------------*/ int List_Search(SqList *L,ElemType e) { int num=0; while(*(L->elem+num)!=e&&(num<=L->length)) num++; if(num<=L->length) return num; else return 0; }