数据结构上机题2011.pdf
文本预览下载声明
数据结构上机实验题目
实验一 线性表的顺序存储结构
实验学时 2学时
背景知识:顺序表的插入、删除及应用。
目的要求:
1.掌握顺序存储结构的特点。
2.掌握顺序存储结构的常见算法。
实验内容
1.输入一组整型元素序列,建立顺序表。
2.实现该顺序表的遍历。
3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。
4.判断该顺序表中元素是否对称,对称返回1,否则返回0。
5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为
偶数。
6.输入整型元素序列利用有序表插入算法建立一个有序表。
7.利用算法6建立两个非递减有序表并把它们合并成一个非递减有序
表。
8.编写一个主函数,调试上述算法。
#includestdio.h
#includemalloc.h
#define INIT_SIZE 5
#define ADD_SIZE 10
typedef struct
{
int *elem;//数组指针elem指示线性表的基地址。
int length;//线性表的当前实际长度。
int listsize;//当前分配的存储容量(以sizeof(ElemType)为单
位。
}SqList;
//1创建单向无序链表
void Creat(SqList L)
{
int go=1;//循环输入结点条件
L.elem=(int*)malloc(INIT_SIZE*sizeof(int));//动态分配初始
大小的INT型空间。
L.listsize=INIT_SIZE;//把当前链表的存储袒赋值为链表动态分
配的初始长度。
L.length=0;//链表的初始长度为0。
while(go==1)
{
if(L.length=L.listsize)//如果所建链表长度超过当前分配的
空间,则增加大小为初始增量的空间。
{
printf(\n所建链表长度超过当前分配的空间,将增加大小为初始
增量的空间!\n);
L.elem=(int
*)realloc(L.elem,(L.listsize+ADD_SIZE)*sizeof(int));
L.listsize+=ADD_SIZE;
}
printf(请输入整数元素:);
scanf(%d,L.elem[L.length]);//输入结点。
L.length++;
printf(\n继续创建操作请输入1,退出创建请输入0:);
scanf(%d,go);
}
}
//2遍历链表
void print(SqList L)
{
int i;
for(i=0;iL.length;i++)
printf(%d ,L.elem[i]);
}
//3查找链表中某一元素
void find(SqList L,int e)
{
int i=0,flag=0,k=0;
while(iL.length)
{
if(L.elem[i]==e)
{
if(k==0)
{
printf(\n在顺序表中找到该元素,位于第);
k=1;
}
flag=1;//所有符合查找条件的元素都设置其标志为flag=1;
}
if(flag==1)printf(%d,,i+1);//输出所有符合查找条件的元素
的位置序号。
i++;
}
if(flag==1)printf(号位置!\n);
else printf(\n在该顺序表中找不到该元素!\n);
}
//4判断所建链表是否对称。
void symmetry(SqList L)
{
int i,ave;
if(L.length==1)printf(\n该顺序表中仅有一个元素!\n);
else
{
ave=L.length/2;//使ave的值为链表的中间变量,作为循环结束条
件。
for(i=0;iave;i++)
{
if(L.elem[i]!=L.elem[L.length-i-1])//判断链表中前后交替结
点是否相等,
{
printf(\n该顺序表为非对称表!\n);//如果在循环过程中出现
不相等的情况,
break;//即可判断此链表是一非对称表。
}
else
if(i=ave-1)printf(\n该顺序表为对称表!\n);//否则如果一直
到最后都相等,则是对称链表。
}
显示全部