计算机软件基础实验1
开始
int i=0,j=0,k=0,m=0
i<=st&&j<=st
Y Y
L1.Data[i]<L2.Data[j]
N
L.Data[k++]=L2.Data[j++] L.Data[k++]=L1.Data[i++]
i<=st j<=st L.Data[k++]=L2.Data[j++] L.Data[k++]=L1.Data[i++] st=k-1 for(m=0;m<=st;m++) printf("%d ",L.Data[m]
{int j; printf("\n顺序表的数据为:\n"); if (st!=-1) for(j=0;j<=st;j++) printf("%d ",L.Data[j]); else printf("顺序表为空!\n"); printf("\n "); } 7)流程图: 开始 定义 int j st==-1? N j=0;j<=st printf("%d ",L.Data[j]) 顺序表为空! j++
插入
测试项 空表 在表头插入 在表尾插入 在表中间插入
合并
测试项 1,2均为空 1空2不空 1,2均不空 输出参数 无 2 3 4 5 6 1 2 3 4 5 6 7 8 9 存在问题 无 无 无
6、 体会
通过本次实验,收获了很多,使我对计算机软件技术有了更深的了 解,在学习探索的过程中,更发现了许多自己的不足。 在编程过程中,遇到了很多的困难,因为C语言知识不是很扎实,导 致这次实验不是很顺利,但是在老师和同学的帮助下,最后终于能及时 的完成这次实验,谢谢老师和同学们的帮助!仔细推敲之后,才发现这
} scanf("%d",&x); } return L; }
3.
1)函数名 :InputSList 2)入口参数:L 3)出口参数;L 4)功能:向线性表中输入数据 5)设计思路:创建空线性表,从键盘输入数据到线性表中,以-1结 束,然后修改表长, 输出线性表。 6)源程序清单 struct SList InputSList(struct SList L) { int i=0; int number=0; printf("\n请输入顺序表的初始化数据,以-1表示结 束\n"); while(i<30) { scanf("%d",&number); if(number==-1) { break; } L.Data[i]=number; st++; i++; } for(int j=0;j<=st;j++) 类型:SList
北京联合大学 实验报告
课程(项目)名称:计算机软件技术基础实 验一(顺序表) 学 院: 自动化 专 业: 信息处理 与智能技术 班 级: 0910030204 成 绩: 学 号: 2009100302440 姓 名: 韩禹辉
2010年11月20 日
一.实验目的
(1)掌握线性表的概念。(2)熟练掌握线性表的顺序存储结构。(3) 熟练掌握线性表在顺序存储结构上的运算。(4)了解测试的思想。
void insert(SList *L,int x) { int i,k; i=0; while((i<L->length-1)&&(x>=L->data[i])) i++; for(k=L->length-1;k>=i;k--) L->data[k+1]=L>data[k]; L->data[i]=x; L->length++; }
L.Data[k+1]=L.Data[k]; L.Data[k]=L.Data[k+1]; scanf(%d,&data) scanf("%d",&data)
(2)运行出现的主要问题及解决方法
5. 运行结果分析
(1) 运行结果 逆置:
删除多余元素:
插入:
合并:
(2) 运行结果分析
逆置
测试项 空表 表长=5(奇数) 输入参数 无 1 2 3 4 5 输出参数 无 5 4 3 2 1 存在问题 无 无
3)出口参数:L 4)功能:建立无序顺序表 5)设计思路: 定义顺序表结构体,从键盘输入数据给x,用指针指 向顺序表的表尾元素,在表满之前,每输入一个新的不为一数据时,尾 指针后移一位,直到输入的数据为负一或表满时完成建立。 6)流程图 开始 定义 int x scanf("%d",&x) Y x = -1? N Y st==MAXSIZE-1? 结束输入 N L.Data[st]=x ++st 7)源程序清单 struct SList InputSList1(struct SList L) { int x=0; printf("\n请输入数据,结束输入-1!\n"); scanf("%d",&x); while(x!=-1) { L.Data[++st]=x; if(st==MAXSIZE-1) { printf("\n顺序表已满!\n"); break;
6.
1)函数名 :delete 2)入口参数:L 3)出口参数;无 4)功能:删除顺序表中值相同的多余的元素 5)设计思路:i++,利用循环,将第i个元素后面的元素和此元素 进行比较,若有和此元素想等的元素,利用a[k]=a[k+1]的思想将其删 除。 6)流程图: 开始 类型:SList
i=0;i<=st;i++ j=i+1;j<st;j++ L.Data[i]==L.Data[j] k=j;k<st;k++ L.Data[k]=L.Data[k+1]
表长=6(偶数)
1 2 3 4 5 6 输入参数 无 1 2 2 3 4 5 1 2 2 3 3 4 1 1 2 2 3 3 4 输入参数 无 向3 4 5 6 7中 插入 1 向2 5 6 8 9中 插入4 向3 4 6 7 8中 插入5 输入参数 无 1:无 2:2 3 4 5 6 1:1 3 5 7 9 2:2 4 6 8
5.
1)函数名 :reverse 2)入口参数:*L 3)出口参数:无 4)功能:将顺序表中元素的逆置 5)设计思路: 定义两个指针变量i,j和结点t。i指向下标为0处, j指向下标为L.length-1处,i++,j--,利用循环将i、j所指向的数 据交换。 6)源程序清单 类型:SList
void reverse(SList *L) { int i,j; datatype t; for(i=0,j=L->length-1;i<j;i++,j--)
7)流程图: 开始 查找适合X插入的位置
k>=i k--, L->data[k+1]=L->data[k] L->data[i]=x L->length++
8.
1)函数名 :unit 2)入口参数:L,L2,L3 3)出口参数:L3 4)功能:将两个有序顺序表合并 5)设计思路: 6)源程序清单(程序应添加必要的注释) 类型:SList
st--;j--; Output L.Data[j]
7)源程序清单: void delete(struct SList L) { int i=0,j=0,k=0; for(i=0;i<=st;i++) { for(j=i+1;j<st;j++) { if(L.Data[i]==L.Data[j]) { for(k=j;k<st;k++) L.Data[k]=L.Data[k+1]; st--; j--; } } } for(j=0;j<=st;j++) { printf("%d ",L.Data[j]); } }
三.算法设计方案 1.
1)函数名 :InputSList1 2)入口参数:无 3)出口参数:L 4)功能:初始化线性表 5)源程序清单: struct SList InitSList() { struct SList L; st=-1; return L; } 类型:SList
2.
1)函数名 :InputSList1 2)入口参数:L 类型:SList
2. 实验内容
1.逆序元素——编写算法实现顺序表中元素的逆置。要求按用户输 入的数据建立一个顺序表。在逆置的过程中使用最少的辅助存储单元。 2.删除多余元素——己知顺序表中的元素非递减有序排列,编写算 法删除顺序表中值相同的多余的元素。 3.插入元素——编写算法,在非递减有序的顺序表中,插入一个给 定的元素,插入后该顺序表仍然递增有序。 4.合并顺序表——有两个顺序表A(有m个元素)和B(有n个元素),其 元素均按从小到大的升序排列。编写算法,将这两个顺序表合并成一个 顺序表C,要求C也是按从小到大的升序排列。
6 5 4 3 2 1 输出参数 无 1 2 3 4 5 1 2 3 4 1 2 3 4 输出参数 无 1 3 4 5 6 7 2 4 5 6 8 9 3 4 5 6 7 8
无 存在问题 无 无 无 无 存在问题 无 无 无 无
删除相同元素
测试项 空表 有1组相同元素 有2组相同元素 有3组相同元素