1. 程式人生 > >線性表的定義與操作---連結串列

線性表的定義與操作---連結串列

typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;

/* 查詢 */
#define ERROR NULL

Position Find( List L, ElementType X )
{
    Position p = L; /* p指向L的第1個結點 */

    while ( p && p->Data!=X )
        p =
p->Next; /* 下列語句可以用 return p; 替換 */ if ( p ) return p; else return ERROR; } /* 帶頭結點的插入 */ /*注意:在插入位置引數P上與課程視訊有所不同,課程視訊中i是序列位序(從1開始),這裡P是連結串列結點指標,在P之前插入新結點 */ bool Insert( List L, ElementType X, Position P ) { /* 這裡預設L有頭結點 */ Position tmp, pre; /* 查詢P的前一個結點 */ for ( pre=
L; pre&&pre->Next!=P; pre=pre->Next ) ; if ( pre==NULL ) { /* P所指的結點不在L中 */ printf("插入位置引數錯誤\n"); return false; } else { /* 找到了P的前一個結點pre */ /* 在P前插入新結點 */ tmp = (Position)malloc(sizeof(struct LNode)); /* 申請、填裝結點 */ tmp->Data =
X; tmp->Next = P; pre->Next = tmp; return true; } } /* 帶頭結點的刪除 */ /*注意:在刪除位置引數P上與課程視訊有所不同,課程視訊中i是序列位序(從1開始),這裡P是擬刪除結點指標 */ bool Delete( List L, Position P ) { /* 這裡預設L有頭結點 */ Position tmp, pre; /* 查詢P的前一個結點 */ for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ; if ( pre==NULL || P==NULL) { /* P所指的結點不在L中 */ printf("刪除位置引數錯誤\n"); return false; } else { /* 找到了P的前一個結點pre */ /* 將P位置的結點刪除 */ pre->Next = P->Next; free(P); return true; } }