1 /*
2 1.不带头结点的单链表。
3 2.需要修改,有引用在里面,只是伪代码。
4
5
6 Levi.
7 date:2013.1.22
8 */
9
10 #include <stdio.h>
11 #include "sys/malloc.h"
12 #include <stdlib.h>
13
14 typedef struct LNode{
15 TypeElem data;
16 struct LNode *next;
17 };
18
19 typedef struct LNode * LinkList;
20
21 void InitList(LinkList *L){
22 *L=NULL;
23 }
24
25 void ClearList(LinkList *L){
26 LinkList p;
27 while(L){
28 p=L;
29 L=p->next;
30 free(p);
31 p=NULL;
32 }
33 }
34
35 void ListEmpty(LinkList L){
36 if(L)
37 printf("The L is not NULL\n");
38 else
39 printf("The L is NULL\n");
40
41 }
42
43 int ListLength(LinkList L){
44 LinkList p;
45 p=L;
46 int count=0;
47 while(p){
48 p=p->next;
49 ++count;
50 }
51 return count;
52 }
53
54 int GetElem(LinkList L,int i,ElemType *e){
55 LinkList p;
56 p=L;
57 int count=1;
58 while(p&&count<i){
59 p=p->next;
60 ++count;
61 }
62 if(!p||count>i){
63 printf("Get error !!\n");
64 return 0;
65 }
66 p->data=*e;
67 return 0;
68 }
69
70 int LocateElem(LinkList L,ElemType e){
71 int i=1;
72 LinkList p=L;
73 while(p&&p->data!=e){
74 p=p->next;
75 i++;
76 }
77 if(!p)
78 return -1;
79 else
80 return i;
81 }
82
83 int ListInsert(LinkList &L,int i,ElemType e){
84 int j=1;
85 LinkList s,p=L;
86 if(i<1)
87 return -1;
88 s=(LinkList)malloc(sizeof(struct LNode));
89 s->data=e;
90 if(i==1){
91 s->next=L;
92 L=s;
93 }
94
95 else{
96 while(p&&j<i-1){
97 p=p->next;
98 ++j;
99 }
100 if(!p)
101 return -1;
102 s->next=p->next;
103 p->next=s;
104
105 }
106 return 0;
107 }
108
109 int ListDelete(LinkList &L,int i,ElemType *e){
110 int j=1;
111 LinkList p=L,q;
112 if(i<1)
113 return -1;
114 else if(i==1){
115 L=p->next;
116 *e=p->data;
117 free(p);
118
119 }
120
121 else{
122 while(p->next&&j<i-1){
123 ++j;
124 p=p->next;
125 }
126 if(!p>next||j>i-1)
127 return -1;
128 q=p->next;
129 p->next=q->next;
130 *e=q->data;
131 free(q);
132
133 }
134 return 0;
135 }
136
137 void ListTraverse(LinkList L,void(*vi)(int)){
138 LinkList p=L;
139 while(p){
140 vi(p->data);
141 p=p->next;
142 }
143 printf("\n");
144 }
145
146
147
148