数据结构课程设计
- 格式:doc
- 大小:220.00 KB
- 文档页数:13
数据结构课程设计报告
姓 名 罗 淇
班级学号 2611090218
指导教师 徐 梅
2011年12月9日
- 2 -
一、课程设计目的和要求
1) 从顺序表中删除具有最小值的元素,并由函数返回主调函数,若顺序表为空则显示出错信息。
2) 顺序存储的线性表A,其数据元素为整型,试编写一算法,将A拆成B和C两个表,使A中元素值大于等于平均值的存入B,小于平均值的存入C中,要求:表B和C另外设置存储空间。
3) 设计一个算法,判定带头结点单链表是否是递增的,若是返回1,否则返回0。
4) 编写算法将带头结点的单链表中最大值移到链表最前面做首元结点。
5) 编写一算法实现对于键盘输入的任意一个非负的十进制整数,打印输出与其等值的八进制数。
二、课程设计内容
1.从顺序表中删除具有最小值的元素,并由函数返回主调函数,若顺序表为空则显示出错信息。
#include
#define MaxSize 100
typedef int DataType;
typedef struct
{
DataType list[MaxSize];
int size;
}SeqList;
void ListInitiate(SeqList *L)
{
L->size=0;
}
int ListLength(SeqList L)
{
return L.size;
}
int ListInsert(SeqList *L,int
i,DataType x)
{
int j;
if(L->size>=MaxSize)
{
printf("顺序表已满无法插入!\n");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法!\n");
return 0;
}
else
{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1];
L->list[i]=x; L->size++;
- 3 - return 1;
}
}
int ListGet(SeqList L,int i,DataType
*x)
{
if(i<0||i>L.size-1)
{
printf("参数i不合法!\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
int ListDelete(SeqList *L,int
i,DataType *x)
{
int j;
if(L->size<=0)
{
printf("顺序表为空!");
return 0;
}
else if(i<0||i>L->size-1)
{
printf("参数i不合法");
return 0;
}
else
{ *x=L->list[i];
for(j=i+1;j<=L->size-1;j++)
L->list[j-1]=L->list[j];
L->size--;
return 1;
}
}
int ListMin(SeqList *L)
{
int i,flag=0;
bool j=false;
for(i=0;isize;i++)
if(L->list[i]list[flag])
flag=i; //记住顺序表中最小值的下标
return flag;
}
void main()
{
SeqList myList;
int i,j,k,n,x;
ListInitiate(&myList);
printf("请确定顺序表的长度:\n");
scanf("%d",&n);
printf("请任意输入%d个数(以空格键隔开):\n",n);
for(i=0;i
{
scanf("%d",&j);
ListInsert(&myList,i,j);
}
printf("删除前顺序表中的元素为:\n");
for(i=0;i
- 4 - ListGet(myList,i,&x);
printf("%d ",x);
}
k=ListMin(&myList); //k为顺序表中最小值的下标
ListDelete(&myList,k,&x);
printf("\n顺序表中最小的元素为:%d\n",x);
//顺序表中的最小值可能有多个,如果有多个,下面会做出删除操作 for(i=0;i
if(myList.list[i]==x)
ListDelete(&myList,i,&x);
printf("删除后顺序表中的元素为:\n");
for(i=0;i
{
ListGet(myList,i,&x);
printf("%d ",x);
}
printf("\n");
}
2. 顺序存储的线性表A,其数据元素为整型,试编写一算法,将A拆成B和C两个表,使A中元素值大于等于平均值的存入B,小于平均值的存入C中,要求:表B和C另外设置存储空间。
#include
#define MaxSize 100
typedef int DataType;
typedef struct
{
DataType list[MaxSize];
int size;
}SeqList;
void ListInitiate(SeqList *L)
{
L->size=0; }
int ListLength(SeqList L)
{
return L.size;
}
int ListInsert(SeqList *L,int
i,DataType x)
{
int j;
if(L->size>=MaxSize) {
- 5 - printf("顺序表已满无法插入!\n");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法!\n");
return 0;
}
else
{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1];
L->list[i]=x;
L->size++;
return 1;
}
}
int ListGet(SeqList L,int i,DataType
*x)
{
if(i<0||i>L.size-1)
{
printf("参数i不合法!\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
int ListSplit(SeqList *L1,SeqList
*L2,SeqList *L3)
{
int i,j=0,k=0,sum=0,avg=0;
for(i=0;isize;i++)
sum+=L1->list[i]; avg=sum/L1->size;
for(i=0;isize;i++)
{
if(L1->list[i]>=avg)
{
L2->list[j]=L1->list[i];
j++;
L2->size++;
}
else
{
L3->list[k]=L1->list[i];
k++;
L3->size++;
}
}
return 1;
}
void main()
{
SeqList myListA;
SeqList myListB;
SeqList myListC;
int i,x;
ListInitiate(&myListA);
ListInitiate(&myListB);
ListInitiate(&myListC);
for(i=0;i<20;i++)
ListInsert(&myListA,i,i+1);
printf("顺序表A为:\n");
for(i=0;i
{
ListGet(myListA,i,&x);
printf("%d ",x);
}
printf("\n");