数据结构 链式表

 

  数据结构课作业之链式表。

  1 #include <cstdio>

  2 #include <cstring>

  3 #include <iostream>

  4 using namespace std;

  5 

  6 struct Node

  7 {

  8     char name[30];

  9     char telp[30];

 10     Node * next;

 11 };

 12 

 13 class Stulist

 14 {

 15     public :

 16         Stulist ();

 17         ~Stulist ();

 18 

 19         void Creat (int n);   //建立n个元素的链式表

 20 

 21         void Insert (Node item, int pos);//按位置插入元素item

 22 

 23         void Find (int pos) const; //按位置查找

 24 

 25         void Delete (int pos); //按位置删除

 26 

 27         void Print () const;  //打印所有数据

 28  

 29         void Clear ();   //清空链式表

 30     private :

 31         Node * first;

 32 };

 33 

 34 void Stulist :: Clear ()

 35 {

 36     Node * Pre = first;

 37     while (Pre)

 38     {

 39         memset (Pre->name, 0, sizeof Pre->name);

 40         memset (Pre->telp, 0, sizeof Pre->telp);

 41         Pre = Pre->next;

 42     }

 43 }

 44 

 45 void Stulist :: Print () const

 46 {

 47     Node * Pre = first->next;

 48     int cnt=1;

 49     cout << "******************************\n";

 50     while (Pre)

 51     {

 52         cout <<"    "<< cnt <<".  "<< Pre->name << "   " << Pre->telp << endl;

 53         Pre = Pre->next;

 54         cnt++;

 55     }

 56     cout << "******************************\n";

 57 }

 58 

 59 void Stulist :: Delete (int pos)

 60 {

 61     Node * Pre = first;

 62     int cnt=0;

 63     cout << "请输入要删除的位置: "; cin >> pos;

 64     while (Pre && cnt<pos-1)

 65     {

 66         Pre = Pre->next;

 67         cnt++;

 68     }

 69     if (Pre==NULL)

 70     {

 71         cout << "试图删除非法位置!\n";

 72         return;

 73     }

 74     Pre->next = Pre->next->next;

 75     cout << "以成功删除第" << pos << " 个数据.\n";

 76 }

 77 

 78 void Stulist :: Find (int pos) const

 79 {

 80     Node * Pre = first;

 81     int cnt=0;

 82     cout << "请输入要查找的位置: "; cin >> pos;

 83     while (Pre && cnt<pos)

 84     {

 85         Pre = Pre->next;

 86         cnt++;

 87     }

 88     if (Pre==NULL)

 89     {

 90         cout << "你要查找的数据不存在,请核对后再查找!\n";

 91         return;

 92     }

 93     cout << "你要查找的信息详细如下:\n";

 94     cout << "************************\n";

 95     cout << " 姓名:"<< Pre->name <<endl;

 96     cout << " 号码:"<< Pre->telp <<endl;

 97     cout << "************************\n";

 98 }

 99 

100 void Stulist::Insert (Node item, int pos)

101 {

102     Node * Pre=first, * Cur;

103     cout << "请输入要插入的位置: "; cin >> pos;

104     int cnt=0;

105     while (Pre && cnt < pos-1)

106     {

107         Pre = Pre->next;

108         cnt++;

109     }

110     if (Pre==NULL)

111     {

112         cout << "试图插入非法位置!\n";

113         return;

114     }

115     cout << "请出入要插入的姓名:"; cin >> item.name;

116     cout << "请出入要插入的号码:"; cin >> item.telp;

117     Cur = new Node;

118     strcpy (Cur->name, item.name);

119     strcpy (Cur->telp, item.telp);

120     Cur->next = Pre->next;

121     Pre->next = Cur;

122     cout << "插入成功!\n";

123 }

124 

125 Stulist::Stulist ()

126 {

127     first = new Node;

128     first->next = NULL;

129 }

130 

131 Stulist :: ~Stulist ()

132 {

133     Node * pre = first;

134     while (first)

135     {

136         pre = first;

137         first = pre->next;

138         delete pre;

139     }

140 }

141 void Stulist::Creat (int n)

142 {

143     Node *Pre, *Cur;

144     first = new Node;

145     Pre = first;

146     cout << "请输入要建立表的大小: "; cin >> n;

147     for (int i=0; i<n; i++)

148     {

149         Cur = new Node;

150         cout << "请输入第 " << i+1 << " 个数据:"; cin >> Cur->name >> Cur->telp;

151         Pre->next = Cur;

152         Pre = Cur;

153     }

154     Pre->next = NULL;

155 }

156 

157 void Meue ()

158 {

159     cout<<" \n ~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~\n"; 

160     cout<<endl<<endl; 

161     cout<<" `````````````````````````````````````````````\n"; 

162     cout<<" ` 1、清空顺序表 `\n"; 

163     cout<<" ` 2、创建顺序表 `\n"; 

164     cout<<" ` 3、插入信息 `\n"; 

165     cout<<" ` 4、删除信息 `\n"; 

166     cout<<" ` 5、查找信息 `\n"; 

167     cout<<" ` 6、显示当前信息 `\n"; 

168     cout<<" ` 0、退出系统 `\n"; 

169     cout<<" `````````````````````````````````````````````\n"; 

170     cout<<"\n请从序号0--6中选择:"; 

171 }

172 

173 void Operater (Stulist &Link)

174 {

175     Meue ();

176     int op, pos, n;

177     Node item;

178     while (1)

179     {

180         while (cin >> op, (op<0||op>6)) cout << "操作不合法:    \n";

181         switch (op)

182         {

183             case 1:

184                 Link.Clear (); break;

185             case 2:

186                 Link.Creat (n); break;

187             case 3:

188                 Link.Insert (item, pos); break;

189             case 4:

190                 Link.Delete (pos); break;

191             case 5:

192                 Link.Find (pos); break;

193             case 6:

194                 Link.Print (); break;

195             default:break;

196         }

197     }

198     cout << "~~~~~~~~~欢迎下次使用~~~~~~~~~\n";

199 }

200 

201 

202 //***************         主程序         **************

203 int main ()

204 {

205     Stulist Link;

206 

207     Operater (Link);

208 

209     return 0;

210 }

 

你可能感兴趣的:(数据结构)