经典数据结构上机题—答案解析.doc
文本预览下载声明
Word文档 下载可编辑
专业资料 资源共享
数据结构上机实验题目
实验一 线性表的顺序存储结构
实验学时 2学时
背景知识:顺序表的插入、删除及应用。
目的要求:
1.掌握顺序存储结构的特点。
2.掌握顺序存储结构的常见算法。
实验内容
1.输入一组整型元素序列,建立顺序表。
2.实现该顺序表的遍历。
3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。
4.判断该顺序表中元素是否对称,对称返回1,否则返回0。
5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
6.输入整型元素序列利用有序表插入算法建立一个有序表。
7.利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。
8. 利用该顺序结构实现循环队列的入队、出队操作。
8.编写一个主函数,调试上述算法。
#include stdio.h
#include stdlib.h
#define OVERFLOW 0
#define MAXSIZE 100
typedef int ElemType;
typedef struct list
{ElemType elem[MAXSIZE];
int length;
}Sqlist;
void Creatlist(Sqlist L)
{int i;
printf(请输入顺序表的长度:); //输入一组整型元素序列,建立一个顺序表。
scanf(%d,L.length);
for(i=0;iL.length;i++)
scanf(%d,L.elem[i]);
}
void printlist(Sqlist L) //以输出的形式实现对该顺序表的遍历
{int i;
for(i=0;iL.length;i++)
printf(%d ,L.elem[i]);
printf(\n);
}
void Searchlist(Sqlist L,int x) //在顺序表中进行顺序查找某一元素x,查找成功则返回其存储位置i,否则返回错误信息
{int i,k=-1;
for(i=0;iL.length;i++)
if(L.elem[i]==x){
k=i+1;printf(%d ,k);}
if(k==-1)
printf(error!);
printf(\n);
}
void Inseri(Sqlist L,int i,int x) //在顺序表的第i个位置上插入一个元素x
{int j;
for(j=L.length;j=i;j--)
L.elem[j]=L.elem[j-1];
L.elem[j]=x;
L.length++;
}
void Delete(Sqlist L,int i) //删除顺序表中第i个元素
{int j;
for(j=i;jL.length;j++)
L.elem[j-1]=L.elem[j];
L.length--;
}
void Insert(Sqlist L,int x) //输入一个元素x,把它插入到有序表中,使顺序表依然有序。
{int i,j;
if(L.length==MAXSIZE) exit(OVERFLOW); //表满,不能插入
for(i=1;i=L.lengthL.elem[i-1]=x;i++);
for(j=L.length;j=i;j--)
L.elem[j]=L.elem[j-1];
L.elem[i-1]=x;
L.length++;
}
void Creatlist_sorted(Sqlist L) //利用有序表插入算法建立一个有序表
{int i,num;
ElemType x;
L.length=0;
printf(请输入顺序表的长度:);
scanf(%d,num);
for(i=1;i=num;i++)
{
scanf(%d,x);
Insert(L,x);
}
}
void Merger(Sqlist p,Sqlist r,Sqlist c) //建立两个非递减有序表,并把它们合并成一个非递减有序表
{
ElemType *a,*b,i=0,j=0,k=0;
a=p.elem[0];
b=r.elem[0];
c.length=p.length+r.length;
while(ip.lengthjr.length)
{if(*a=*b)
{c.elem[k]=*b;b++;k++;j++;}
else {c.elem[k]=*a;a++;k++;i++;}
}
if(
显示全部