本文共 4603 字,大约阅读时间需要 15 分钟。
?????????????????????????????????????????????????????????????????????????????????????????????
#define OK 1#define ERROR 0typedef int Status;typedef char ElemType;
typedef struct LNode { ElemType data; struct LNode *next;} LNode, *LinkList;LinkList L; // ?????? Status InitList(LinkList &L) { L = new LNode; // ????? L->next = NULL; // ?????????????? return OK;} Status DestroyList(LinkList &L) { while (L) { // ??????? LinkList p = L; // ?????? L = L->next; // ???????? delete p; // ????????? } return OK;} Status ClearList(LinkList &L) { if (!L) { // ???? return OK; } LinkList p = L->next; // ??????????? while (p) { // ??????? LinkList q = p->next; // ???????????? delete p; // ?????? p = q; // ???????? } L->next = NULL; // ?????????????? return OK;} int ListEmpty(LinkList L) { return L->next ? 0 : 1; // ??????????0?????1} int ListLength(LinkList L) { int count = 0; LinkList p = L->next; // ?????????? while (p) { count++; p = p->next; } return count;} Status GetElem(LinkList L, int i, ElemType &e) { if (i <= 0 || i > ListLength(L)) { return ERROR; } LinkList p = L; int j = 0; while (p && j < i - 1) { p = p->next; j++; } if (!p || j >= i - 1) { return ERROR; } e = p->data; return OK;} Status LocateElem(LinkList L, ElemType &e) { if (!L) { // ???? return 0; } LinkList p = L; int j = 0; while (p && p->data != e) { p = p->next; j++; } if (p) { return j; } else { return 0; }} Status ListInsert(LinkList &L, int i, ElemType e) { if (i <= 0 || i > ListLength(L) + 1) { return ERROR; } LinkList p = L; int j = 0; while (p && j < i - 1) { p = p->next; j++; } if (!p || j >= i - 1) { return ERROR; } LinkList s = new LNode; s->data = e; s->next = p->next; p->next = s; return OK;} Status ListDelete(LinkList &L, int i, ElemType &e) { if (i <= 0 || i > ListLength(L)) { return ERROR; } LinkList p = L; int j = 0; while (p && j < i - 1) { p = p->next; j++; } if (!p || j >= i - 1) { return ERROR; } LinkList q = p->next; e = q->data; p->next = q->next; delete q; return OK;} void CreateList_H(LinkList &L, int n) { L = new LNode; // ????? L->next = NULL; // ?????????????? for (int i = n; i > 0; --i) { LinkList p = new LNode; // ????? cin >> p->data; // ???? p->next = L->next; // ???????? L->next = p; // ??????????? }} void CreateList_R(LinkList &L, int n) { L = new LNode; // ????? L->next = NULL; // ?????????????? LinkList r = L; // ?????????? for (int i = 0; i < n; ++i) { LinkList p = new LNode; // ????? cin >> p->data; // ???? p->next = NULL; // ?????????????? r->next = p; // ????????? r = p; // ????? }} int main() { int ret = InitList(L); if (ret) { cout << "???????" << endl; } else { cout << "???????" << endl; } int i; cout << "?????????"; cin >> i; cout << "???" << i << "??????" << endl; CreateList_H(L, i); // ???? // CreateList_R(L, i); // ???? cout << "????????" << ListLength(L) << endl; ElemType e; cout << "?????????????"; cin >> i; GetElem(L, i, e); cout << "???" << i << "??????" << e << endl; cout << "?????????"; cin >> e; LocateElem(L, e); cout << "??" << e << "?????" << j << endl; cout << "?????????????"; cin >> e >> i; ret = ListInsert(L, i, e); if (ret) { cout << "????" << endl; } else { cout << "????" << endl; } cout << "???????????" << ListLength(L) << endl; cout << "?????????????"; cin >> i; ret = ListDelete(L, i, e); if (ret) { cout << "????" << endl; } else { cout << "????" << endl; } cout << "?????" << endl; ClearList(L); if (ListEmpty(L)) { cout << "?????" << endl; } else { cout << "?????" << endl; } DestroyList(L); cout << "??????" << endl; return 0;} InitList????????????DestroyList??????????ClearList??????????????GetElem????????????????LocateElem???????????????ListInsert?????????????ListDelete????????????????CreateList_H?????????????CreateList_R?????????????转载地址:http://yvoy.baihongyu.com/