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)线性表-链式映像
最新推荐文章于 2024-03-10 23:31:33 发布