单链表(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 }

原文地址:https://www.cnblogs.com/maoguy/p/5943175.html