|
|
发表于 2022-11-12 09:58:49
|
显示全部楼层
一样的,画图,把图画出来代码就会写了
不画图,代码确实不会写
我也是画了图的,画了图我才会写的
- #include <iostream>
- using namespace std;
- #define TRUE 1
- #define FALSE 0
- #define OK 1
- #define ERROR 0
- //#define INFEASIBLE -1
- //#define OVERFLOW -2
- #define MAXSIZE 100
- typedef int Status;
- typedef int ElemType;
- typedef struct Node {
- ElemType data;
- struct Node *prior, *next;
- } Node, *LinkList;
- Status InitList(LinkList *L);
- Status DestryList(LinkList L);
- Status ListInsert(LinkList L, int i, const ElemType *e);
- Status ListDelete(LinkList L, int i, ElemType *e);
- Status ClearList(LinkList L);
- Status ListEmpty(LinkList L);
- int ListLength(LinkList L);
- Status GetElem(LinkList L, int i, ElemType *e);
- Status SetElem(LinkList L, int i, const ElemType *e);
- Status ListTravers(LinkList L);
- Status ListAppend(LinkList L, const ElemType *e);
- Status InitList(LinkList *L) {
- *L = new Node;
- (*L)->next = NULL;
- (*L)->prior = NULL;
- return OK;
- }
- Status DestryList(LinkList L) {
- ClearList(L);
- delete L;
- return OK;
- }
- Status ListInsert(LinkList L, int i, const ElemType *e) {
- if(i > ListLength(L)) return FALSE;
- LinkList p = L;
- while(i--) p = p->next;
- LinkList q = new Node;
- q->data = *e;
- q->next = p->next;
- q->prior = p;
- p->next = q;
- if(q->next) q->next->prior = q; // 注意这里
- return TRUE;
- }
- Status ListDelete(LinkList L, int i, ElemType *e) {
- if(i >= ListLength(L)) return FALSE;
- LinkList p = L;
- while(i--) p = p->next;
- LinkList q = p->next;
- p->next = q->next;
- if(q->next) q->next->prior = p; // 同样,注意这里
- delete q;
- return TRUE;
- }
- Status ClearList(LinkList L) {
- ElemType e;
- while(!ListEmpty(L)) ListDelete(L, 0, &e);
- return OK;
- }
- Status ListEmpty(LinkList L) {
- return ListLength(L) == 0;
- }
- int ListLength(LinkList L) {
- int i = 0;
- LinkList p = L->next;
- while(p) {++i; p = p->next;}
- return i;
- }
- Status GetElem(LinkList L, int i, ElemType *e) {
- if(i >= ListLength(L)) return FALSE;
- LinkList p = L->next;
- while(i--) p = p->next;
- *e = p->data;
- return TRUE;
- }
- Status SetElem(LinkList L, int i, const ElemType *e) {
- ElemType temp;
- Status s = ListDelete(L, i, &temp);
- return s ? ListInsert(L, i, e) : s;
- }
- Status visit(ElemType e) {
- cout << e << " ";
- return OK;
- }
- Status ListTravers(LinkList L) {
- ElemType e;
- int length = ListLength(L);
- for(int i = 0; i < length; i++) {
- GetElem(L, i, &e);
- visit(e);
- }
- cout << endl;
- return OK;
- }
- Status ListAppend(LinkList L, const ElemType *e) {
- return ListInsert(L, ListLength(L), e);
- }
- int main() {
- LinkList L;
- InitList(&L);
- for(ElemType e = 0; e < 10; ++e) {
- ListAppend(L, &e);
- }
- ListTravers(L);
- DestryList(L);
- return 0;
- }
复制代码 |
|