顺åºåå¨ç»æ线æ§è¡¨åºæ¬æä½ Cè¯è¨å®ç°
#include <stdio.h>
//以ä¸ä¸ºå½æ°è¿è¡ç»æç¶æ代ç
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100 //线æ§è¡¨åå¨ç©ºé´çåå§åé
é
#define LISTINCREMENT 10 //线æ§è¡¨åå¨ç©ºé´åé
å¢é
typedef int Status; //å½æ°ç±»åï¼å
¶å¼ä¸ºä¸ºå½æ°ç»æç¶æ代ç
typedef int ElemType; //å设æ°æ®å
ç´ ä¸ºæ´å
typedef struct
{
ElemType *elem; //åå¨ç©ºé´åºå
int length; //å½åé¿åº¦
int listsize; //å½ååé
çåå¨å®¹é
}SqList;
//å®ç°çº¿æ§è¡¨ç顺åºåå¨ç»æçç±»åå®ä¹
//å½æ°å£°æå¼å§
Status InitList_Sq(SqList &L);
void DestroyList_Sq(SqList &L);
void ClearList_Sq(SqList &L);
void ListEmpty_Sq(SqList L);
Status GetElem_Sq(SqList L,i,&e);
int LocateElem_Sq(SqList L,e,compare());
Status PriorElem_Sq(SqList L,cur_e,&pre_e);
Status NextElem_Sq(SqList L,cur_e,&next_e);
Status ListInsert_Sq(SqList &L,i,e);
Status ListDelete_Sq(SqList &L,i,&e);
ListTravel_Sq(SqList L,visit());
//å½æ°å£°æç»æ
int main(void)
{
return 0;
}
//å½æ°å®ä¹å¼å§
///////////////////////////////////////
//å½æ°åï¼InitList_Sq()
//åæ°ï¼SqList *L
//åå§æ¡ä»¶ï¼æ
//åè½ï¼æé ä¸ä¸ªç©ºçº¿æ§è¡¨
//è¿åå¼ï¼åå¨åé
失败ï¼OVERFLOW
// åå¨åé
æåï¼OK
///////////////////////////////////////
Status InitList_Sq(SqList *L)
{
L.elem=(ElemType*)malloc((LIST_INIT_SIZE *sizeof(ElemType)); //åé
空é´
if(!L.elem)
exit(OVERFLOW); //è¥åå¨åé
失败ï¼è¿åOVERFLOW
L.length=0; //空表ï¼é¿åº¦ä¸º0
L.listsize=LIST_INIT_SIZE; //åå§åå¨å®¹é
return OK;
}
///////////////////////////////////////
//å½æ°åï¼DestroyList_Sq()
//åæ°ï¼SqList *L
//åå§æ¡ä»¶ï¼çº¿æ§è¡¨Lå·²åå¨
//åè½ï¼éæ¯çº¿æ§è¡¨
//è¿åå¼ï¼æ
///////////////////////////////////////
void DestroyList_Sq(SqList *L)
{
if (L->elem)
free(L->elem); //éæ¾çº¿æ§è¡¨å æ®çææåå¨ç©ºé´
}
///////////////////////////////////////
//å½æ°åï¼ClearList_Sq()
//åæ°ï¼SqList *L
//åå§æ¡ä»¶ï¼çº¿æ§è¡¨Lå·²åå¨
//åè½ï¼æ¸
空线æ§è¡¨
//è¿åå¼ï¼æ
///////////////////////////////////////
void ClearList_Sq(SqList *L)
{
L->length=0; //å°çº¿æ§è¡¨çé¿åº¦ç½®ä¸º0
}
///////////////////////////////////////
//å½æ°åï¼ListEmpty_Sq()
//åæ°ï¼SqList L
//åå§æ¡ä»¶ï¼çº¿æ§è¡¨Lå·²åå¨
//åè½ï¼å¤æ线æ§è¡¨æ¯å¦ä¸ºç©º
//è¿åå¼ï¼ç©ºï¼TRUE
// é空ï¼FALSE
///////////////////////////////////////
Status ListEmpty_Sq(SqList L)
{
if (L.length==0)
return TRUE;
else
return FALSE;
}
///////////////////////////////////////
//å½æ°åï¼ListLength_Sq()
//åæ°ï¼SqList L
//åå§æ¡ä»¶ï¼çº¿æ§è¡¨Lå·²åå¨
//åè½ï¼è¿å线æ§è¡¨é¿åº¦
//è¿åå¼ï¼çº¿æ§è¡¨é¿åº¦(L.length)
///////////////////////////////////////
Status ListLength_Sq(SqList L)
{
return (L.length);
}
///////////////////////////////////////
//å½æ°åï¼GetElem_Sq()
//åæ°ï¼SqList L,int i,ElemType *e
//åå§æ¡ä»¶ï¼çº¿æ§è¡¨Lå·²åå¨ï¼1<=i<=ListLength(L)
//åè½ï¼ç¨eè¿å线æ§è¡¨ä¸ç¬¬i个å
ç´ çå¼
//è¿åå¼ï¼(i<1)||(i>ListLength(L))ï¼ERROR
// 1<=i<=ListLength(L)ï¼OK
///////////////////////////////////////
Status GetElem_Sq(SqList L,int i,ElemType *e)
{
if (i<1||i>L.length)
return ERROR; //å¤æiå¼æ¯å¦åçï¼è¥ä¸åçï¼è¿åERROR
*e=L.elem[i-1]; //æ°ç»ä¸ç¬¬i-1çåå
åå¨ç线æ§è¡¨ä¸ç¬¬i个æ°æ®å
ç´ çå
容
return OK;
}
///////////////////////////////////////
//å½æ°åï¼LocateElem_Sq()
//åæ°ï¼L,e,compare(ElemType1,ElemType2)
//åå§æ¡ä»¶ï¼çº¿æ§è¡¨Lå·²åå¨ï¼compare()为æ°æ®å
ç´ å¤å®å½æ°
//åè½ï¼è¿å顺åºè¡¨Lä¸ç¬¬1个ä¸e满足å
³ç³» compare( ) çæ°æ®å
ç´ çä½åº
//è¿åå¼ï¼è¥å¨Lä¸åå¨äºe满足å
³ç³»compare()çå
ç´ ï¼å
¶ä½åº
// è¥å¨Lä¸ä¸åå¨äºe满足å
³ç³»compare()çå
ç´ ï¼0
///////////////////////////////////////
int LocateElem_Sq(SqList L,e,compare(ElemType1,ElemType2))
{
ããint i = 1; // i çåå¼ä¸ºç¬¬1å
ç´ çä½åº
ããint p = L.elem; // p çåå¼ä¸ºç¬¬1å
ç´ çåå¨ä½ç½®
ããwhile (i <= L.length && !(*compare)(*p++,e))
ããã++i; // ä¾æ¬¡è¿è¡å¤å®
ããif (i <= L.length)
return i; // æ¾å°æ»¡è¶³å¤å®æ¡ä»¶çæ°æ®å
ç´ ä¸ºç¬¬ i 个å
ç´
ããelse
return 0; // 该线æ§è¡¨ä¸ä¸åå¨æ»¡è¶³å¤å®çæ°æ®å
ç´
}
Status PriorElem_Sq(SqList L,cur_e,&pre_e);
//è§Status NextElem_Sq(SqList L,cur_e,&next_e);
Status NextElem_Sq(SqList L,cur_e,&next_e);
//æçæè·¯æ¯å
ç¨LocateElem_Sq()æç´¢cur_eçä½åºï¼
//åçæ¯å¦å¤§äºçäºlengthï¼
//è¥æ¯ï¼åè¿åOVERFLOWï¼å¦åè¿åå继
//è¿æ ·ä¹è®¸æç¹éº»ç¦ï¼æ以å¸æ大家è½å¤è¡¥å
æ¹æ¡
//by wangweinoo1
///////////////////////////////////////
//å½æ°åï¼ListInsert_Sq()
//åæ°ï¼SqList *L,int i,ElemType e
//åå§æ¡ä»¶ï¼çº¿æ§è¡¨Lå·²åå¨ï¼1<=i<=ListLength(L)+1
//åè½ï¼å¨çº¿æ§è¡¨ä¸ç¬¬i个æ°æ®å
ç´ ä¹åæå
¥æ°æ®å
ç´ e
//è¿åå¼ï¼å¤±è´¥ï¼ERROR
// æåï¼OK
///////////////////////////////////////
Status ListInsert_Sq(SqList *L,int i,ElemType e)
{
ElemType *j;
if (L->length==LIST_MAX_LENGTH)
return ERROR; //æ£æ¥æ¯å¦æå©ä½ç©ºé´
if (i<1||i>L->length+1)
return ERROR; //æ£æ¥iå¼æ¯å¦åç
//å°çº¿æ§è¡¨ç¬¬i个å
ç´ ä¹åçææå
ç´ åå移å¨
for (j=L->length-1;j>=i-1;i++)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e; //å°æ°å
ç´ çå
容æ¾å
¥çº¿æ§è¡¨ç第i个ä½ç½®ï¼
L->length++;
return OK;
}
///////////////////////////////////////
//å½æ°åï¼ListDelete_Sq()
//åæ°ï¼SqList *L,int i,Elemtype *e
//åå§æ¡ä»¶ï¼çº¿æ§è¡¨Lå·²åå¨ï¼1<=i<=ListLength(L)
//åè½ï¼å°çº¿æ§è¡¨Lä¸ç¬¬i个æ°æ®å
ç´ å é¤
//è¿åå¼ï¼å¤±è´¥ï¼ERROR
// æåï¼OK
///////////////////////////////////////
int ListDelete_Sq(SqList *L,int i,Elemtype *e)
{
if (IsEmpty(L))
return ERROR; //æ£æµçº¿æ§è¡¨æ¯å¦ä¸ºç©º
if (i<1||i>L->length)
return ERROR; //æ£æ¥iå¼æ¯å¦åç
*e=L->elem[i-1]; //å°æ¬²å é¤çæ°æ®å
ç´ å
容ä¿çå¨eææ示çåå¨åå
ä¸
//å°çº¿æ§è¡¨ç¬¬i+1个å
ç´ ä¹åçææå
ç´ åå移å¨
for (j=i;j<=L->length-1;j++) L->elem[j-1]=L->elem[j];
L->length--;
return OK;
}
//å½æ°å®ä¹ç»æ