数据结构课程设计

  • 格式: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");