標籤:c 資料結構 考研 電腦專業
線性表的單鏈表格儲存體結構
struct LNode{ ElemType data; LNode *next;};typedef LNode *LinkList;
帶有頭結點的單鏈表的12個基本操作
void InitList(LinkList &L){ L = (LinkList)malloc(sizeof(LNode)); if (!L)exit(OVERFLOW); L->next = NULL;}void DestroyList(LinkList &L){ LinkList q; while (L){ q = L->next; free(L); L = q->next; }}void ClearList(LinkList &L){ LinkList q = L->next; L->next = NULL; DestroyList(q);}Status ListEmpty(LinkList L){ if (L->next == NULL)return FALSE; else return TRUE;}int ListLength(LinkList L){ LinkList p = L->next; int i = 0; while (p) { i++; p = p->next; } return i;}Status GetElem(LinkList L, int i, ElemType &e){ int j = 1; LinkList p = L->next; while (p &&j <i) { j++; p = p->next; } if (!p || j>i)return ERROR; e = p->data; return OK;}int LocateElem(LinkList L, ElemType e, Status(*compare)(ElemType, ElemType)){ int i = 1; LinkList p = L->next; while (p){ i++; if (compare(p->data, e)) return i; p = p->next; } return 0;}Status PriorElem(LinkList L, ElemType cur_e, ElemType &pre_e){ int i = 2; LinkList q, p = L->next; while (p->next){ q = p->next; if (q->data == cur_e){ pre_e = p->data; return OK; } p = q; }}Status NextElem(LinkList L, ElemType cur_e, ElemType &next_e){ LinkList p = L->next; while (p->next){ if (p->data == cur_e){ next_e = p->next->data; return OK; } p = p->next; } return ERROR;}Status ListInsert(LinkList L, int i, ElemType e){ int j = 0; LinkList s, p = L; while (p && j < i-1) { j++; p = p->next; } if (!p || j > i - 1) return ERROR; s = (LinkList)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s; return OK;}Status ListDelete(LinkList L, int i, ElemType &e){ int j = 0; LinkList q, p = L; while (p && j < i - 1) { j++; p = p->next; } if (!p || j > i - 1) return ERROR; q = p->next; e = q->data; p->next = q->next; free(q); return OK;}void ListTraverse(LinkList L, void(*visit)(ElemType&)){ LinkList p = L->next; while (p) { visit(p->data); p = p->next; } printf("\n");}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
線性錶帶頭結點的單鏈表的鏈式表示和實現