《数据结构和算法分析》课程设计:顺序表、单链表、顺序栈、查找、排序算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*******大学
《数据结构与算法分析》课程设计
题目:数据结构上机试题
学生姓名:
学号:
专业:信息管理与信息系统
班级:
指导教师:
2014年04月
目录
一、顺序表的操作 (3)
【插入操作原理】 (3)
【删除操作原理】 (3)
【NO.1代码】 (4)
【运行截图演示】 (8)
二、单链表的操作 (11)
【创建操作原理】 (11)
【插入操作原理】 (11)
【删除操作原理】 (11)
【NO.2代码】 (12)
【运行截图演示】 (21)
三、顺序栈的操作 (26)
【数值转换原理】 (26)
【NO.3代码】 (27)
【运行截图演示】 (31)
四、查找算法 (33)
【顺序查找原理】 (33)
【折半查找原理】 (33)
【NO.4代码】 (34)
【运行截图演示】 (39)
五、排序算法 (41)
【直接插入排序原理】 (41)
【快速排序原理】 (41)
【NO.5代码】 (42)
【运行截图演示】 (47)
一、顺序表的操作
(1)插入元素操作:将新元素x 插入到顺序表a 中第i 个位置;
(2)删除元素操作:删除顺序表a 中第i 个元素。
【插入操作原理】
线性表的插入操作是指在线性表的第i-1个数据元素和第i 个数据元素之间插入一个新的数据元素,就是要是长度为n 的线性表:
()11,,,,,i i n a a a a -…………
变成长度为n+1的线性表:
()11,,,,,,i i n a a b a a -…………
数据元素1i a -和i a 之间的逻辑关系发生了变化。
(其【插入原理】在课本P23的算法2.3有解释)
【删除操作原理】
反之,线性表的删除操作是使长度为n 的线性表:
()111,,,,,,i i i n a a a a a -+…………
变成长度为n-1的线性表:
()111,,,,,i i n a a a a -+…………
数据元素1i a -、i a 和1i a +之间的逻辑关系发生变化,为了在存储结构上放映这个变化,同样需要移动元素。
(其【删除原理】在课本P24的算法2.4有解释)
【NO.1代码】
#include
#define MAX 100
typedef int datatype;
typedef struct
{
datatype data[MAX];
int list;
}
sequenlist; /*顺序表*/
int main()
{
int insert( sequenlist *L, int x, int i );
int deletee( sequenlist *L, int i );
int input( sequenlist *L );
int output( sequenlist *L );
sequenlist s,*p=&s;
int indata,inlocate,deletedx;
input(p);
printf( "请输入要插入的数:" ); scanf( "%d",&indata );
printf( "请输入要插入的位置:" );
scanf( "%d",&inlocate );
insert( p,indata,inlocate );
printf( "插入后的数据:" );
output(p);
printf( "请输入要删除的位置:" );
scanf( "%d",&deletedx );
deletee( p, deletedx );
printf( "删除后的数据:" );
output(p);
return 0;
}
int output( sequenlist *L )
{
int i;
for( i=0; i<=L->list; i++ )
printf( "%d ",L->data[i] );
printf( "\n\n" );
return(1);
}
int input( sequenlist *L ) {
int i;
printf( "请输入原始数据个数:" );
scanf( "%d",&( L->list ) );
L->list--;
printf( "请输入原始数据:" );
for( i=0; i <= L->list; i++ )
scanf( "%d",&( L->data[i] ) );
printf( "原始数据为:" );
output(L);
return (1);
}
int insert( sequenlist *L, int x, int i )
{
int j;
if ( ( (*L).list )>=MAX-1 )
{
printf( "overflow" ); return 0;
}
else
{
if ( (i<1) || (i> ( (*L).list )+1 ) ) {
printf( "error\n" );