首页 > 其他分享 >数据结构实验1

数据结构实验1

时间:2024-10-22 16:20:57浏览次数:1  
标签:线性表 ++ int length 实验 SqList 数据结构 data



  1 //1.线性表顺序表的初始化ok
  2 //2.输出ok,插入ok,删除ok,逆转ok,销毁ok,置空表ok(两种插入,两种删除) 
  3 //3.求表长ok,查找元素ok,判断是否为空ok
  4 //4.实现顺序表元素的逆转并输出结果ok
  5 //5.顺序表合并:动态创建两个有序的顺序表,输出合并后的顺序表
  6 #include<cstdio>
  7 #include<cstdlib>
  8 #include<algorithm>
  9 #include<iostream>
 10 #include<iomanip>
 11 using namespace std;
 12 #define MAXSIZE 100
 13 
 14 typedef int status;//状态
 15 typedef int ElemType;//数据类型 
 16 
 17 //定义函数头 
 18 typedef struct {
 19     ElemType data[MAXSIZE];
 20     int length;
 21 
 22 }SqList;//顺序表 
 23 
 24 //初始化线性表
 25 void InitList(SqList* L)
 26 {
 27     L->length = 0;
 28 }
 29 
 30 //创建线性表 输入初始元素 
 31 void  CreateList(SqList* L, ElemType a[], int n)
 32 {
 33     for (int i = 0; i < n; i++)
 34     {
 35         L->data[i] = a[i];
 36         L->length++;
 37     }
 38 }
 39 
 40  //输出线性表中元素
 41 void PrintList(SqList* L)
 42 {
 43     for (int i = 0; i < L->length; i++)
 44     {
 45         cout << L->data[i] << setw(2);
 46     }
 47     putchar('\n');
 48 }
 49 
 50  //释放线性表(置空)
 51 void Free(SqList* L)
 52 {
 53     free(L);
 54     printf("Have Free!\n");
 55 }
 56 
 57 //删除线性表
 58 status DelList(SqList* L, ElemType n)
 59 {
 60     int i;
 61     if (n<1 || n>L->length)
 62         return 0;
 63     else {
 64         for (i = n - 1; i <= L->length - 2; i++)
 65         {
 66             L->data[i] = L->data[i + 1];
 67         }
 68         L->length--;
 69         return 1;
 70     }
 71 }
 72  //判断表是否为空
 73 status Listempty(SqList* L)
 74 {
 75     return (L->length == 0);
 76 }
 77 //输出线性表长度
 78 void Listlen(SqList* L)
 79 {
 80     cout << (L->length) << endl;
 81 }
 82 //表中插入元素 
 83 status InsList(SqList* L, int j, ElemType k)
 84 {
 85     int i;
 86     if (j > L->length + 1 || j < 0)
 87         return 0;
 88     else
 89     {
 90         for (i = L->length-1;i>=j-1;i--)
 91         {
 92             L->data[i + 1] = L->data[i];
 93         }
 94         L->data[i + 1] = k;  
 95         L->length++;
 96         return 1;
 97     }
 98 }
 99 //线性表元素查找
100 void Locate(SqList* L, int y)
101 {
102     int i, j = 0;
103     for (i = 0; i < L->length; i++)
104     {
105         if (L->data[i] == y)j = i + 1;
106     }
107     if (j == 0)printf("没有找到该元素\n");
108     else printf("%d是第%d个元素\n",y,j);
109 }
110 //线性表逆转
111 void Swap(ElemType* a, ElemType* b)
112 {
113     ElemType temp = *a;
114     *a = *b;
115     *b = temp;
116 }
117 void Reverse(SqList* L)
118 {
119     for (int i = 0; i < L->length / 2; i++)
120     {
121         Swap(&L->data[i], &L->data[L->length - 1 - i]);
122     }
123 }
124 //排序
125 void SortList(SqList* L)
126 {
127     for (int i = 0; i < L->length-1; i++)
128     {
129         for (int j = 0; j < L->length -1- i; j++)
130         {
131             if (L->data[j] > L->data[j + 1])
132             {
133                 ElemType temp = L->data[j];
134                 L->data[j] = L->data[j + 1];
135                 L->data[j + 1] = temp;
136             }
137         }
138     }
139 }
140 //主函数
141 int main()
142 {
143     int n;
144     ElemType a[MAXSIZE];
145     printf("输入元素个数:");
146     cin >> n;
147     printf("输入元素:");
148     for (int i = 0; i < n; i++)
149         cin >> a[i];//输入元素 
150     sort(a, a + n);//排序 
151     SqList* L;
152     L = (SqList*)malloc(sizeof(SqList));//申请空间
153     InitList(L);//创建表
154     cout << "空表已创建" << endl;
155     CreateList(L, a, n);//追加元素 
156     printf("元素已加入表中\n");
157     printf("输出元素:\n");
158     PrintList(L);//输出元素 
159     printf("线性表长度:");
160     Listlen(L);//输出线性表长度
161     //插入
162     int loc, flag, member;
163     printf("输入插入位置和元素:");
164     cin >> loc >> member;
165     flag = InsList(L, loc, member);
166     if (flag == 1)
167     {
168         printf("输出元素:\n");
169         PrintList(L);//输出线性表
170         printf("线性表长度:");
171         Listlen(L);//输出线性表长度
172     }
173     if (flag == 0)
174         printf("插入错误!\n");
175     //删除
176     int place;
177     printf("请输入要删除的位置:");
178     cin >> place;
179     flag = DelList(L, place);
180     if (flag == 1)
181     {
182         printf("输出元素:\n");
183         PrintList(L);//输出线性表
184         printf("线性表长度:");
185         Listlen(L);//输出线性表长度
186     }
187     if (flag == 0)
188         printf("删除失败!\n");
189     //判空
190     if (Listempty(L))
191         cout << "Empty" << endl;
192     else
193         cout << "Not Empty" << endl;
194     int y;
195     printf("请输入要查找的数y:");
196     cin >> y;
197     Locate(L, y);//线性表查找
198     //逆转顺序表
199     Reverse(L);
200     printf("逆转输出元素:\n");
201     PrintList(L);//输出线性表
202     printf("线性表长度:");
203     Listlen(L);//输出线性表长度
204     Free(L);//置空
205     SqList* L1,*L2,*L3;
206     L1 = (SqList*)malloc(sizeof(SqList));//申请空间
207     L2 = (SqList*)malloc(sizeof(SqList));//申请空间
208     L3 = (SqList*)malloc(sizeof(SqList));//申请空间
209     InitList(L1);//创建表
210     cout << "空表L1已创建" << endl;
211     printf("输入L1元素,检测到-1停止:");
212     int la=0,num1=0;
213     while (la != -1)
214     {
215         cin >> la;
216         if (la != -1)
217         {
218             L1->data[num1] = la;
219             num1++;
220             L1->length++;
221         }
222     }
223     InitList(L2);//创建表
224     cout << "空表L2已创建" << endl;
225     printf("输入L2元素,检测到-1停止:");
226     int lb = 0, num2 = 0;
227     while (lb != -1)
228     {
229         cin >> lb;
230         if (lb != -1) 
231         {
232             L2->data[num2] = lb;
233             num2++;
234             L2->length++;
235         }
236     }
237     InitList(L3);//创建表
238     cout << "空表L3已创建" << endl;
239     int cnt=0;
240     for (int i = 0; i < L1->length; i++)
241     {
242         L3->data[i] = L1->data[i];
243         L3->length++;
244         cnt++;
245     }
246     for (int i = 0; i < L2->length; i++)
247     {
248         if (cnt > MAXSIZE)
249         {
250             printf("超出!\n");
251             break;
252         }
253         L3->data[cnt] = L2->data[i];
254         cnt++;
255         L3->length++;
256     }
257     //排序
258     SortList(L3);
259     PrintList(L3);//输出线性表
260     //lemType la[MAXSIZE], lb[MAXSIZE], lc[MAXSIZE];
261     return 0;
262 }

 

 

 

标签:线性表,++,int,length,实验,SqList,数据结构,data
From: https://www.cnblogs.com/DREAMSRING/p/18469542

相关文章

  • 数据结构实验6-串及应用
    目录【id:54】【10分】A.串应用-计算一个串的最长的真前后缀【id:55】【10分】B.DS串应用—最长重复子串【id:56】【20分】C.子串循环问题(Ver.I)【id:53】【20分】D.DS串应用--串替换【id:52】【20分】E.DS串应用--KMP算法【id:57】【20分】F.可重叠子串(Ver.......
  • 20222303 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    一、实验目标使用netcat获取主机操作Shell,cron启动使用socat获取主机操作Shell,任务计划启动使用MSFmeterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell使用MSFmeterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试......
  • ES6中的Set数据结构的常用方法和使用场景
    ES6中的Set数据结构Set是ES6中新增的数据结构,用于存储不重复的值,允许存储任何类型的唯一值。Set的核心特点是值唯一性,类似数学中的集合。常用方法1.add(value)添加值到Set中,如果值已存在则不会添加。constset=newSet();set.add(1);//Set{1}2.delete(v......
  • 20222308 2024-2025-2《网络与系统攻防技术》实验二实验报告
    1.实验内容1.1实践目标使用netcat获取主机操作Shell,cron启动某项任务(任务自定)PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程使用socat获取主机操作Shell,任务计划启动使用MSFmeterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机......
  • 《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
    第三十二章音频FFT实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原......
  • PKI-Lab实验报告
    Task1:BecomingaCertificateAuthority(CA)在宿主机/docker1.1.1.1上执行以下命令:sudocp/usr/lib/ssl/openssl.cnf/sudoopensslreq-new-x509-keyoutca.key-outca.crt-configopenssl.cnfEnterPEMpassphrase:xxxxxVerifying-EnterPEMpassphrase:......
  • 西电OS实验一:内核 API
    实验题目实验目的通过本实验的学习,掌握信创操作系统内核定制中所常用的内核数据结构和函数,具体包括:i.内核链表;ii.内核内存的分配释放;iii.内核线程;iv.内核锁;实验内容设计一个内核模块,并在此内核模块中创建一个内核链表以及两个内核线程。•线程1需要遍历进程链表......
  • Java数据结构---顺序表
    目录一、线性表二、顺序表2.1、顺序表的定义 2.2、顺序表的接口实现三、ArrayList3.1、 ArrayList简介3.2、ArrayList的实现 3.3、ArrayList实现的完整代码一、线性表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用......
  • 考研数据结构-栈
    (一)、栈的基本概念     栈是一种只能在一端进行插入或者删除操作的线性表。允许插入或者删除的一端称为栈顶。栈顶由一个称为栈顶指针的位置指示器(是一个变量,对于顺序栈,就是记录栈顶元素所在数组位置符号的一个整型变量;对于链式栈,就是记录栈顶元素所在结点地址的指......
  • 20222401 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    1实验内容1.1实践基本知识1.1.1后门后门就是不经过正常认证流程而访问系统的通道。最早的后门并不是恶意的,而是开发人员为了便于在开发期间调试程序而设置的快捷路径。按照存在位置进行分类,可以分为以下4类:编译器后门操作系统后门应用程序后门伪装成正常程序的后门1.......