?? seqlist.cpp
字號:
#include <stdio.h>
#include <stdlib.h>
#include "seqlist.h"
Status InitList_Sq(SqList &L)
{//構造一個空表L
L.elem=(ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType)); //為表L動態分配存儲空間
if(!L.elem) return OVERFLOW; //存儲分配失敗
L.length=0; //空表長度為0
L.listsize=LIST_INIT_SIZE; //初始存儲容量
return OK;
}//InitList_Sq
Status DestroyList_Sq(SqList &L)
{ //表L已存在,銷毀表L
if(!L.elem) return ERROR; // 若表L不存在
free(L.elem); // 若表L已存在,回收存儲空間
L.elem=NULL;
L.length = 0;
L.listsize = 0;
// L.incresize=0;
return OK;
}// DetroyList_Sq
Status ClearList_Sq(SqList &L)
{//表L已存在,將表L置空
if (!L.elem) return ERROR; // 若表L不存在
L.length = 0; //若表L已存在,將L置空
return OK;
}// ClearList_Sq
Status ListEmpty_Sq(SqList L)
{//表L已存在
if(L.length!=0) return FALSE;
return TRUE;
}
int ListLength_Sq(SqList L)
{ //表L已存在
return(L.length);
}
Status GetElem_Sq(SqList L, int i, ElemType &e)
{//表L已存在,將表L中第i 個元素賦值給 e
if ((i<1)||(i>L.length)) return ERROR;
e=L.elem[i-1]; //將表L中第i 個元素賦值給 e
return OK;
}// GetElem_Sq
int LocateElem_Sq(SqList L,ElemType e, int(*compare)(ElemType e1,ElemType e2))
{/* 表L已存在,在L中查找與元素e滿足關系compare()的第1個元素,返回該元素在表中的序號,
若表中不存在這樣的元素,則返回0*/
int i;
if(L.length==0) return 0;
i=0;
while(i<=L.length-1&&!compare(L.elem[i],e))i++;
if(i<=L.length-1) return(i+1);
else return 0;
}//LocateElem_Sq
/*
ElemType *LocateElem_Sq(SqList L,ElemType e, Status(*compare)(ElemType e1,ElemType e2))
{// 表L已存在,在L中查找與元素e滿足關系compare()的第1個元素,返回該元素的地址,若表中不存在這樣的元素,則返回0
int i;
if(L.length==0) return NULL;
i=0;
while(i<=L.length-1&&!compare(L.elem[i],e))i++;
if(i<=L.length-1) return(&L.elem[i]);
else return NULL;
}//LocateElem_Sq
*/
Status ListInsert_Sq(SqList &L, int i, ElemType e)
{ //表L已存在,在表L中第i個位置之前插入新的元素e, i的合法值為1≤i≤ListLength_Sq(L)+1
ElemType *newbase,*p,*q;
if (i<1||i>L.length+1) return ERROR; //i不合法
if (L.length>=L.listsize)
{ //空間已滿,重新分配空間
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if (!newbase) return OVERFLOW;//存儲分配失敗
L.elem=newbase;
L.listsize+=LISTINCREMENT; //增加存儲容量
}
q=&(L.elem[i-1]); //q為插入位置
for (p=&(L.elem[L.length-1]); p>=q ; --p)*(p+1)=*p;
*q=e; //插入e
++(L.length); //表長增1
return OK;
}//ListInsert_Sq
Status ListDelete_Sq(SqList &L, int i, ElemType &e)
{ //表L已存在,在表L中刪除第 i個元素,并用e返回其值 i的合法值為 1≤i≤L.length,
ElemType *p,*q;
if ((i<1)||(i>L.length)) return ERROR; // 參數i不合法
p=&(L.elem[i-1]); //p為被刪除元素的位置
e=*p; // 被刪除元素的值賦給e
q=&L.elem[L.length-1]; // 表尾元素的位置
for (++p; p<=q;++p)*(p-1)=*p; //被刪除元素之后的元素前移
--L.length; //表長減1
return OK;
}//ListDelete_Sq
Status ListAppend_Sq(SqList &L, ElemType e) {
//將元素e附加在表尾
ElemType *newbase;
if (L.length>=L.listsize)
{ //空間已滿,重新分配空間
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if (!newbase) return OVERFLOW;//存儲分配失敗
L.elem=newbase;
L.listsize+=LISTINCREMENT; //增加存儲容量
}
L.elem[L.length] = e; //將元素e插入在表尾
++L.length; // 表長增1
return 1;
}
Status ListTraverse_Sq(SqList L,void(*Visit)(ElemType e))
{//表L已存在,遍歷表L
ElemType *p,*q;
p=L.elem;
q=&L.elem[L.length-1];
for(p;p<=q;++p) Visit(*p);
return OK;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -