单链表(C++实现)
使用C++语言实现单链表的创建、查找、删除、插入等功能
1 #include <iostream> 2 using namespace std ; 3 4 #define ERROR -1 5 #define CORRECT 1 6 7 //定义 8 struct LNode { 9 int data ; 10 LNode *next ; 11 } ; 12 LNode *LinkList ; 13 14 //查找 15 LNode *SearchLinkList (LNode *L , int i) 16 { 17 int j ; 18 LNode *p ; 19 20 p = L ; 21 j = 1 ; 22 while (p &&j < i) 23 { 24 p = p -> next ; 25 j++ ; 26 } 27 if (!p || j>i) 28 { 29 return (p) ; 30 } 31 } 32 33 //插入 34 int InsertLinkList (LNode *L , int e , int i) 35 { 36 //在链表L中第i个位置插入元素e 37 LNode *p , *s ; 38 p = SearchLinkList (L , i-1) ; 39 if (!p) 40 { 41 return (ERROR) ; 42 } 43 s = new LNode ; 44 //节点插入L中 45 s -> data = e ; 46 s -> next = p -> next ; 47 p -> next = s ; 48 49 return (CORRECT) ; 50 } 51 52 //表单创建 53 LNode *CreateLinkList (int *r , int n) 54 { 55 int j ; 56 LNode *L , *p , *s ; 57 58 if (n <= 0) 59 { 60 return (NULL) ; 61 } 62 s = new LNode ; 63 s -> data = r[1] ; 64 s -> next = NULL ; 65 L = s ; 66 p = L ; 67 for (j = 2 ; j <= n ; j++) 68 { 69 /* 70 s = new LNode ; 71 s -> data = r[j] ; 72 s -> next = NULL ; 73 p -> next = s; 74 p = s ; 75 */ 76 77 InsertLinkList (L , r[j] , j) ; 78 } 79 return (L) ; 80 } 81 82 //删除 83 int DeleteLinkList (LNode *L , int i) 84 { 85 //在表中删除第i个位置 86 int e ; 87 LNode *p , *q ; 88 89 p = SearchLinkList (L , i-1) ; 90 if (!p) 91 { 92 return (ERROR) ; 93 } 94 q = p -> next ; 95 p -> next = p -> next -> next ; //不可用q,因为q是用来指示将要删除的内存 96 e = q -> data ; 97 delete (q) ; 98 99 return (e) ; 100 } 101 102 //结果输出 103 int ShowLinkList (LNode *L) 104 { 105 LNode *p ; 106 107 if (!L) 108 { 109 return (ERROR) ; 110 } 111 p = L ; 112 while (p -> next) 113 { 114 cout << p -> data <<" " ; 115 p = p -> next ; 116 } 117 cout << p -> data << endl ; 118 return (CORRECT) ; 119 } 120 121 int main (int argc , char * argv[]) 122 { 123 int r[100] , i ,SampleNum , SearchPos , NewPos , NewItem , DelPos ; 124 LNode *p ; 125 126 cin >> SampleNum ; 127 for (i = 1 ; i <= SampleNum ; i++) 128 { 129 cin >> r[i] ; 130 } 131 LinkList = CreateLinkList (r , SampleNum) ; 132 ShowLinkList (LinkList) ; 133 134 cin >> SearchPos ; 135 p = SearchLinkList (LinkList , SearchPos) ; 136 cout << p -> data << endl ; 137 138 cin >> NewPos ; 139 cin >> NewItem ; 140 InsertLinkList (LinkList , NewItem , NewPos) ; 141 ShowLinkList (LinkList) ; 142 143 cin >> DelPos ; 144 DeleteLinkList (LinkList , DelPos) ; 145 ShowLinkList (LinkList) ; 146 147 return 0; 148 }