数据结构实验1

news/2024/10/22 16:30:41

  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 }

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

多校A层冲刺NOIP2024模拟赛11

又双叒叕垫底了。 rank 11,T1 90,T2 12,T3 5,T4 35。 accdoer上 rank 44,T1 100,T2 0,T3 5,T4 35。 难度难评,T1签,剩下的不可做?死磕T3了,猜一个结论假一个,打完暴力遗憾离场。 好像两个题库都挂了几分,不管了,赛前挂分RP就++。 慢报:5k_sync_closer成功地取得…

Java 中的垃圾收集器有哪些,它们的工作原理是什么?

在 Java 中,垃圾收集(GC)是自动内存管理的核心部分,它帮助开发者免于手动管理内存分配和回收,提升了开发效率和应用性能。Java中的主要垃圾收集器包括Serial GC、Parallel GC、CMS (Concurrent Mark Sweep) GC、G1 (Garbage-First) GC,以及最新的 ZGC (Z Garbage Collect…

应对复杂架构下的监控挑战?统一运维可观测能力是关键!

在全球数字化变革背景下,企业需适应数字经济与市场变化,进行系统性数字化转型。在“十四五”规划指导下,企业纷纷探求数字化应用之路,大数据、云计算、人工智能、区块链等技术成了热门话题,其中云运维备受瞩目。 企业在数字化转型中难免会碰到云上系统规划、运维体系建设、…

2024年全国大学生信息安全竞赛安徽省赛-WP

2024年全国大学生信息安全竞赛安徽省赛-WP没有re,不会......0X01 初赛(CTF) MISC 图像损坏 损坏的GIF文件,补上缺失的文件头 ​​ 用puzz拆分GIF,得到多个图片 ​​ 每张图对应六十四挂幻方配数图,得到 Q1RGe2FiY19kZWZfZ30 ​​ ​​ base64解码得到 CTF{abc_def_g} ​​…

保姆级 | MySQL的安装配置教程(非常详细)

一、下载Mysql 从官网下载MySQL,这里我选用的是Mysql8.0.34版本二、安装Mysql 下载完成后直接双击进行安装,打开后的页面如下所示:“Developer Default”是开发者默认 “Server only”仅作为服务器安装 “Clientonly”仅作为客户端安装 “Full”是完整安装 “Custom”是自定…

【架构与设计】常见微服务分层架构的区别和落地实践

作者:京东科技 康志兴前言 从强调内外隔离的六边形架构,逐渐发展衍生出的层层递进、注重领域模型的洋葱架构,再到和DDD完美契合的整洁架构。架构风格的不断演进,其实就是为了适应软件需求越来越复杂的特点。 可以看到,越现代的架构风格越倾向于清晰的职责定位,且让领域模…

2024-10-21

文本属性 text-align属性控制文本的水平对齐方式text-decoration属性控制文本下划线text-transform属性控制文本的大小写text-indent属性控制文本的首行缩进示例实操点击查看代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="…