• 数据结构 链式表


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

      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 << "******************************
    ";
     50     while (Pre)
     51     {
     52         cout <<"    "<< cnt <<".  "<< Pre->name << "   " << Pre->telp << endl;
     53         Pre = Pre->next;
     54         cnt++;
     55     }
     56     cout << "******************************
    ";
     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 << "试图删除非法位置!
    ";
     72         return;
     73     }
     74     Pre->next = Pre->next->next;
     75     cout << "以成功删除第" << pos << " 个数据.
    ";
     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 << "你要查找的数据不存在,请核对后再查找!
    ";
     91         return;
     92     }
     93     cout << "你要查找的信息详细如下:
    ";
     94     cout << "************************
    ";
     95     cout << " 姓名:"<< Pre->name <<endl;
     96     cout << " 号码:"<< Pre->telp <<endl;
     97     cout << "************************
    ";
     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 << "试图插入非法位置!
    ";
    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 << "插入成功!
    ";
    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<<" 
     ~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~
    "; 
    160     cout<<endl<<endl; 
    161     cout<<" `````````````````````````````````````````````
    "; 
    162     cout<<" ` 1、清空顺序表 `
    "; 
    163     cout<<" ` 2、创建顺序表 `
    "; 
    164     cout<<" ` 3、插入信息 `
    "; 
    165     cout<<" ` 4、删除信息 `
    "; 
    166     cout<<" ` 5、查找信息 `
    "; 
    167     cout<<" ` 6、显示当前信息 `
    "; 
    168     cout<<" ` 0、退出系统 `
    "; 
    169     cout<<" `````````````````````````````````````````````
    "; 
    170     cout<<"
    请从序号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 << "操作不合法:    
    ";
    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 << "~~~~~~~~~欢迎下次使用~~~~~~~~~
    ";
    199 }
    200 
    201 
    202 //***************         主程序         **************
    203 int main ()
    204 {
    205     Stulist Link;
    206 
    207     Operater (Link);
    208 
    209     return 0;
    210 }
  • 相关阅读:
    创建窗体不抢夺焦点的方法
    控件绘制的四种方法
    ATL CAxWindow类创建问题一则
    PE文件版本那些事儿
    GDIPlus非典型误用一例
    stl 常用代码
    For each loop in Native C++
    win7 64 下 VS2008 调试、退出时错误的解决
    DailyWallpaper v1.03 released
    编程当道,学点Python技术好傍身
  • 原文地址:https://www.cnblogs.com/khan724/p/4139846.html
Copyright © 2020-2023  润新知