数据结构 链式表

 

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

  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 }

 

转载于:https://www.cnblogs.com/khan724/p/4139846.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值