数据结构学习笔记(4)线性表-链式映像

  1 线性表的链式结构:
  2     typedef struct LNode{
  3         ElemType data;
  4         struct LNode *next;
  5     }LNode, *LinkList;
  6
  7     //取链表中第i个元素
  8     status getNode_L(LinkList L, int pos, ElemType &e){
  9         p = L->next; j = 1; //初始化
 10         while(p && j < pos){
 11             p = p->next;
 12             ++j;
 13         }
 14         if(!p || j > pos)
 15             return ERROR; //pos个元素不存在
 16         e = p->data;
 17         return OK;
 18     }
 19     //该算法的时间复杂度为O((*L).length())
 20
 21
 22     //链表的插入
 23     status insertNode_L(LinkList L, int pos, ElemType e){
 24         p = L; j = 0; //初始化
 25         while(p && j < pos-1){
 26             p = p->next;
 27             ++j;
 28         }
 29         if(!p || pos < 1)
 30             return ERROR;  //pos小于1或者大于表长
 31         s = (LinkList)malloc(sizeof(LNode));
 32         s->data = e;
 33         s->next = p->next;
 34         p->next = s;
 35         return OK;
 36     }
 37     //时间复杂度O((*L).length)
 38
 39
 40     //删除操作
 41     status deleteNode_L(LinkList L, int pos ElemType &e){
 42         p = L; j = 0;
 43         while(p->next && j < pos-1){
 44             p = p->next;
 45             ++j;
 46         }
 47         if(!(p->next) || pos < 1)
 48             return ERROR;
 49         q = p->next;
 50         e = q->data;
 51         p->next = q->next;
 52         free(q);
 53         return OK;
 54
 55     }
 56
 57     //链表的产生
 58     void createList_L(LinkList &L, int n){
 59         L = (LinkList)malloc(sizeof(LNode));
 60         L->next = NULL;
 61         for(i = n; i > 0; --i){
 62             p = (LinkList)malloc(sizeof(LNode));
 63             scanf(&p->data);
 64             p->next = L->next;
 65             L->next = p;
 66         }
 67     }
 68
 69
 70
 71     改进链表的设置:
 72     增加表长,表尾指针,当前位置指针 三个数据域。
 73
 74 带头节点的线性链表类型:
 75     typedef struct LNode{
 76         ElemType data;
 77         struct LNode *next;
 78     }*Link, *Position;
 79
 80     status makeNode(Link &p, ElemType e);
 81     void freeNode(Link &p);
 82
 83     typedef struct{
 84         Link head, tail;
 85         int len;
 86         Link current;
 87     }
 88
 89     status initList(LinkList &L);
 90     status destroyList(LinkList &L);
 91     //引用型操作
 92     status emptyList(LinkList L);
 93     int lengthList(LinkList L);
 94     status prior(LinkList L);
 95     status next(LinkList L);
 96     ElemType getCurElem(LinkList L);
 97     status locatePos(LinkList L, int i);
 98     status locateElem(LinkList L, ElemType e, status(*compare)(ElemType, ElemType));
 99     status traverseList(LinkList L, status(*visit)());//依次对L的每个元素调用函数visit()
100     //加工型操作
101     status clear(LinkList &L);
102     status setCurElem(LinkList &L, ElemType e);
103     status append(LinkList &L, Link s);
104     status insAfter(LinkList &L, ElemType e);//e插入到当前指针之后
105     status delAfter(LinkList &L, ElemType *e);//删除当前指针之后的节点
106

你可能感兴趣的:(数据结构学习笔记(4)线性表-链式映像)