数据结构实验一(顺序表基本操作)题目和源程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout << endl ;
cout << setw(5) << L.elem[i] ;
}
cout << endl ;
}
//使线性表按值非递减排列
void Notdegression( Sqlist &L, int a )
{
int m, n ;
n = a - 1 ;
while( n )
{
for( int i = 0; i < (a-1); i++ )
// ds01.cpp :定义控制台应用程序的入口点。
#include "stdafx.h"
#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<ctime>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
for( int i = 0; i < a; i++ )
L.elem[i] = rand( ) % 100 ;
}
//输出线性表的值
void Output( Sqlist &L )
{
int m ;
m = L.length ;
for( int i = 0; i < m; i++ )
{
if( i % 10 == 0 )
void Union_sq( Sqlist &La, Sqlist &Lb )
{
double *pa, *pb, *pa_last, *pb_last, *p ;
pa = La.elem ;//pa指向La的基地址
pb = Lb.elem ;//pb指向Lb的基地址
pb_last = Lb.elem + Lb.length - 1 ;//La表尾元素的位置
(7)打印输出La中的元素值。
2.编写程序完成下面的操作:
(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。
(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。
(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用
union_Sq操作实现A=A∪B。
四、思考与提高
{
if( *pa < *pb )
*pc++ = *pa++ ;
else
*pc++ = *pb++ ;
}
while( pa <= pa_last )
*pc++ = *pa++ ;//插入La的剩余元素
while( pb <= pb_last )
*pc++ = *pb++ ;//插入Lb的剩余元素
}
//实现A = A∪B
2.对顺序表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容:
1.编写程序实现顺序表的下列基本操作:
(1)初始化顺序表La。
(2)将La置为空表。
(3)销毁La。
(4)在La中插入一个新的元素。
(5)删除La中的某一元素。
(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。
实验1:顺序表基本操作
一、实验目的
1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。
3.掌握对多函数程序的输入、编辑、调试和运行过程。
二、实验要求
1.预习C语言中结构体的定义与基本操作方法。
假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A∩B?
/*----------------------------------------
* 01_顺序表.cpp --顺序表基本操作
*对顺序表的每个基本操作都用单独的函数来实现
*水上飘2009年写
----------------------------------------*/
if( !L.elem ) exit( -2 ) ;//存储分配失败
L.length = 0 ;//空表长度为0
L.listsize = LIST_INIT_SIZE ;//初始存储容量
பைடு நூலகம்return L ;
}
//给线性表随机赋值
void Start( Sqlist &L, int a )
{
L.length = a ;
using namespace std;
typedef struct {
double *elem;//存储空间基址
int length;//当前长度
int listsize;//当前分配的存储容量
}Sqlist;
//构造一个空的线性表
Sqlist InitList( Sqlist &L )
{
L.elem = (double *)malloc(LIST_INIT_SIZE * sizeof(double)) ;
{
if( L.elem[i] > L.elem[i+1] )
{
m = L.elem[i] ;
L.elem[i] = L.elem[i+1] ;
L.elem[i+1] = m ;
}
else continue ;
}
n-- ;
a-- ;
}
}
//归并La和Lb,得到元素也按非递减排列的Lc
void Merger( Sqlist &La, Sqlist &Lb, Sqlist &Lc )
{
double *pa, *pb, *pc, *pa_last, *pb_last ;
pa = La.elem ;//pa指向La的基地址
pb = Lb.elem ;//pb指向Lb的基地址
Lc.listsize = Lc.length = La.length + Lb.length ;
pc = Lc.elem = (double *)malloc(Lc.listsize * sizeof(double)) ;
if( !Lc.elem ) exit( -2 ) ;//存储分配失败
pa_last = La.elem + La.length - 1 ;//La表尾元素的位置
pb_last = Lb.elem + Lb.length - 1 ;//Lb表尾元素的位置
while( pa <= pa_last && pb <= pb_last )//归并La和Lb于Lc
pa_last = La.elem + La.length - 1 ;//Lb表尾元素的位置
La.listsize += Lb.listsize ;
cout << setw(5) << L.elem[i] ;
}
cout << endl ;
}
//使线性表按值非递减排列
void Notdegression( Sqlist &L, int a )
{
int m, n ;
n = a - 1 ;
while( n )
{
for( int i = 0; i < (a-1); i++ )
// ds01.cpp :定义控制台应用程序的入口点。
#include "stdafx.h"
#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<ctime>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
for( int i = 0; i < a; i++ )
L.elem[i] = rand( ) % 100 ;
}
//输出线性表的值
void Output( Sqlist &L )
{
int m ;
m = L.length ;
for( int i = 0; i < m; i++ )
{
if( i % 10 == 0 )
void Union_sq( Sqlist &La, Sqlist &Lb )
{
double *pa, *pb, *pa_last, *pb_last, *p ;
pa = La.elem ;//pa指向La的基地址
pb = Lb.elem ;//pb指向Lb的基地址
pb_last = Lb.elem + Lb.length - 1 ;//La表尾元素的位置
(7)打印输出La中的元素值。
2.编写程序完成下面的操作:
(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。
(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。
(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用
union_Sq操作实现A=A∪B。
四、思考与提高
{
if( *pa < *pb )
*pc++ = *pa++ ;
else
*pc++ = *pb++ ;
}
while( pa <= pa_last )
*pc++ = *pa++ ;//插入La的剩余元素
while( pb <= pb_last )
*pc++ = *pb++ ;//插入Lb的剩余元素
}
//实现A = A∪B
2.对顺序表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容:
1.编写程序实现顺序表的下列基本操作:
(1)初始化顺序表La。
(2)将La置为空表。
(3)销毁La。
(4)在La中插入一个新的元素。
(5)删除La中的某一元素。
(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。
实验1:顺序表基本操作
一、实验目的
1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。
3.掌握对多函数程序的输入、编辑、调试和运行过程。
二、实验要求
1.预习C语言中结构体的定义与基本操作方法。
假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A∩B?
/*----------------------------------------
* 01_顺序表.cpp --顺序表基本操作
*对顺序表的每个基本操作都用单独的函数来实现
*水上飘2009年写
----------------------------------------*/
if( !L.elem ) exit( -2 ) ;//存储分配失败
L.length = 0 ;//空表长度为0
L.listsize = LIST_INIT_SIZE ;//初始存储容量
பைடு நூலகம்return L ;
}
//给线性表随机赋值
void Start( Sqlist &L, int a )
{
L.length = a ;
using namespace std;
typedef struct {
double *elem;//存储空间基址
int length;//当前长度
int listsize;//当前分配的存储容量
}Sqlist;
//构造一个空的线性表
Sqlist InitList( Sqlist &L )
{
L.elem = (double *)malloc(LIST_INIT_SIZE * sizeof(double)) ;
{
if( L.elem[i] > L.elem[i+1] )
{
m = L.elem[i] ;
L.elem[i] = L.elem[i+1] ;
L.elem[i+1] = m ;
}
else continue ;
}
n-- ;
a-- ;
}
}
//归并La和Lb,得到元素也按非递减排列的Lc
void Merger( Sqlist &La, Sqlist &Lb, Sqlist &Lc )
{
double *pa, *pb, *pc, *pa_last, *pb_last ;
pa = La.elem ;//pa指向La的基地址
pb = Lb.elem ;//pb指向Lb的基地址
Lc.listsize = Lc.length = La.length + Lb.length ;
pc = Lc.elem = (double *)malloc(Lc.listsize * sizeof(double)) ;
if( !Lc.elem ) exit( -2 ) ;//存储分配失败
pa_last = La.elem + La.length - 1 ;//La表尾元素的位置
pb_last = Lb.elem + Lb.length - 1 ;//Lb表尾元素的位置
while( pa <= pa_last && pb <= pb_last )//归并La和Lb于Lc
pa_last = La.elem + La.length - 1 ;//Lb表尾元素的位置
La.listsize += Lb.listsize ;