您的位置:首页 > 编程语言 > C语言/C++

单链表(C++实现)

2016-10-09 17:43 281 查看
使用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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: