数据结构课作业之链式表。
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 }