【C语言】数据结构C语言版 实验1 线性表的顺序实现
运行环境:Dev-C++#
vs2013可能不能运行
首先新建一个头文件sequlist.h#
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef int datatype; typedef struct{ datatype a[MAXSIZE]; int size; }sequence_list; /*初始化顺序表*/ void initseqlist(sequence_list *L) { L->size = 0; } /*输入顺序表*/ void input(sequence_list *L) { datatype x; initseqlist(L); printf("请输入一组数据,以0做为结束符:\n"); scanf_s("%d", &x); while (x) { L->a[L->size++] = x; scanf_s("%d", &x); } } /*从文件输入顺序表*/ void inputfromfile(sequence_list *L, char *f) { int i, x; FILE *fp = fopen(f,"r"); L->size = 0; if (fp) { while (!feof(fp)) { fscanf(fp, "%d", &L->a[L->size++]); } fclose(fp); } } /*输出顺序表*/ void print(sequence_list *L) { int i; for (i = 0; i < L->size; i++) { printf("%5d", L->a[i]); if ((i + 1) % 10 == 0) printf("\n"); } printf("\n"); }
1、 基于sequlist.h中定义的顺序表,编写算法函数reverse(sequence_list *L),实现顺序表的就地倒置。#
代码:
/*源文件 文件名称 lab1.c */
#include "sequlist.h" /*请将本函数补充完整,并进行测试*/ void reverse(sequence_list *L) { int i,j; datatype x; i=0; j=L->size-1; while (i<j) { x=L->a[i]; L->a[i]=L->a[j]; L->a[j]=x; i++; j--; } } int main() { sequence_list L; /*定义顺序表*/ input(&L); /*输入测试用例*/ print(&L); /*输出原表*/ reverse(&L); print(&L); /*输出新表*/ }
测试:
2、 编写一个算法函数void sprit( sequence_list *L1,sequence_list *L2,sequence_list *L3),将顺序表L1中的数据进行分类,奇数存放到存到顺序表L2中,偶数存到顺序表L3中,编写main()进行测试。#
代码:
/*源文件 文件名称 lab2.c */ #include "sequlist.h" /*请将本函数补充完整,并进行测试*/ void sprit(sequence_list *L1,sequence_list *L2,sequence_list *L3) { int i,j,k; i=j=k=0; for (i=0;i<L1->size;i++) { if (L1->a[i]%2==1) L2->a[j++]=L1->a[i]; else L3->a[k++]=L1->a[i]; } L2->size=j; L3->size=k; } int main() { sequence_list L1,L2,L3; /*定义三个顺序表*/ input(&L1); /*输入L1*/ sprit(&L1,&L2,&L3); /*对L1进行分类*/ print(&L1); /*输出L1、L2和L3*/ print(&L2); print(&L3); }
测试:
3、 已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。#
代码:
/*源文件 文件名称 lab3.c */ #include "sequlist.h" /*请将本函数补充完整,并进行测试*/ void merge(sequence_list *L1,sequence_list *L2,sequence_list *L3) { int i,j,k; i=j=k=0; while (i<L1->size && j<L2->size ) { if (L1->a[i]<L2->a[j]) L3->a[k++]=L1->a[i++]; else L3->a[k++]=L2->a[j++]; } while (i<L1->size) L3->a[k++]=L1->a[i++]; while (j<L2->size) L3->a[k++]=L2->a[j++]; L3->size=k; } int main() { sequence_list L1,L2,L3; input(&L1); /*输入时请输入有序数据*/ input(&L2); /*输入时请输入有序数据*/ merge(&L1,&L2,&L3); /*合并数据到L3*/ print(&L3); /*输出L3*/ }
测试:
4、 假设顺序表la与lb分别存放两个整数集合,函数inter(seqlist *la,seqlist *lb,seqlist *lc) 的功能是实现求顺序表la与lb的交集存放到顺序表lc中,请将函数补充完整.#
新建两个文本文件
代码:
/*源文件 文件名称 lab4.c */ #include "sequlist.h" /*请将本函数补充完整,并进行测试*/ void inter(sequence_list *la,sequence_list *lb,sequence_list *lc) { int i,j,k; k=0; for (i=0; i<la->size; i++) { j=0; while (j<lb->size && la->a[i]!=lb->a[j]) j++; if (j<lb->size) lc->a[k++]=la->a[i]; } lc->size=k; } int main() { sequence_list la,lb,lc; inputfromfile(&la,"1.txt"); /*从文件1.txt建立顺序表*/ inputfromfile(&lb,"2.txt"); /*从文件2.txt建立顺序表*/ print(&la); /*输出la*/ print(&lb); /*输出lb*/ inter(&la,&lb,&lc); /*求la与lb的交集存于lc中*/ print(&lc); /*输出lc*/ return 0; }
测试:
5、 请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边, 所有偶数调整到表的右边,并分析算法的时间复杂度。#
新建一个文本文件
代码:
/*源文件 文件名称 lab5.c */ #include "sequlist.h" /*请将本函数补充完整,并进行测试*/ void partion(sequence_list *L) { int i,j; datatype x; i=0; j=L->size-1; do { while (i<j && L->a[i]%2==1 ) i++; while (i<j && (L->a[j]&0x1)==0) j--; if (i<j) { x=L->a[i]; L->a[i++]=L->a[j]; L->a[j--]=x; } }while (i<j); } int main() { sequence_list L; inputfromfile(&L,"3.txt"); print(&L); /*输出表L*/ partion(&L); print(&L); /*输出新表*/ return 0; }
测试:
作者:木子欢儿
出处:https://www.cnblogs.com/HGNET/p/14011810.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
部分文章来源于网络,如疏漏未标注原文地址或侵权,请联系进行删除。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件
2019-11-20 【C语言】输入圆的半径,求解圆的周长和面积