数据结构 链式表

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

  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 }
时间: 2024-07-31 02:20:28

数据结构 链式表的相关文章

数据结构之链式表

数据结构之链式表 理解 以链式的形式构造顺序线性表 采取指针将不同地址的结点相连接,地址没有联系 查找.删除.插入都需要从头结点向后循环,时间复杂度都为O(n) 不存在过度占用空间的情况,需要一个申请一个,不用时,返还. 代码(差一个链式表初始化) #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct LNode *PtrToLNode; struct LNode{ Elemen

4-3 求链式表的表长 (10分)

本题要求实现一个函数,求链式表的表长. 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; L是给定单链表,函数Length要返回链式表的长度. 裁判测试程序样例: #include <stdio.h> #include <stdl

pta-数据结构与算法题目集(中文)--4-4 链式表的按序号查找

本题要求实现一个函数,找到并返回链式表的第K个元素. 函数接口定义: ElementType FindKth( List L, int K ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; L是给定单链表,函数FindKth要返回链式表的第K个元素.如果该元素不存在,则返回ERROR. 裁判

4-4 链式表的按序号查找 (10分)

本题要求实现一个函数,找到并返回链式表的第K个元素. 函数接口定义: ElementType FindKth( List L, int K ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; L是给定单链表,函数FindKth要返回链式表的第K个元素.如果该元素不存在,则返回ERROR. 裁判

c语言实现数据结构中的链式表

以下是我用c语言实现数据结构中的链式表   #pragma once;    #ifndef _STDLIB_H    #include <stdlib.h>    #endif    #ifndef _ELEMTYPE_H    typedef int ElemType;                                                    #endif        #ifndef _SORTTYPE_H    typedef int SortType;  

6-3 求链式表的表长

6-3 求链式表的表长(10 分) 本题要求实现一个函数,求链式表的表长. 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; L是给定单链表,函数Length要返回链式表的长度. 裁判测试程序样例: #include <stdio.h>

6-4 链式表的按序号查找

6-4 链式表的按序号查找(10 分) 本题要求实现一个函数,找到并返回链式表的第K个元素. 函数接口定义: ElementType FindKth( List L, int K ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; L是给定单链表,函数FindKth要返回链式表的第K个元素.如

6-4 链式表的按序号查找(10 分)

6-4 链式表的按序号查找(10 分) 本题要求实现一个函数,找到并返回链式表的第K个元素. 函数接口定义: ElementType FindKth( List L, int K ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; L是给定单链表,函数FindKth要返回链式表的第K个元素.如

数据结构 链式-顺序存储

链式存储结构,又叫链接存储结构.在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的). 它不要求逻辑上相邻的元素在物理位置上也相邻.因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点. 链式存储结构特点: 编辑 1.比顺序存储结构的存储密度小(链式存储结构中每个结点都由数据域与指针域两部分组成,相比顺序存储结构增加了存储空间). 2.逻辑上相邻的节点物理上不必相邻. 3.插入.删除灵活 (不必移动节点,只要改变节点中的指针). 4