数据结构课程设计分析报告

我们大一这个学期学的【软件技术基础(数据结构)】,现在期末老师要求交一份3000字左右的课程设计分析报告,内容包括:
【1】链式存储队列的数据结构(逻辑结构+存储结构)分析
【2】链式存储队列的基本C语言结构体分析与定义
【3】链式存储队列各基本操作的功能及实现分析
【4】主程序设计分析
问题4的主程序要求和主程序如下:
利用自编的子程序实现以下功能:
①创建一个空队
②判断新建的队列是否为空
③提示用户输入"队列的长度"
④根据用户输入的"队列的长度",逐一提示用户输入"队列中的各个元素", 完成队列的构造; */
⑤判断此时的队列是否为空
⑥调用子程序打印当前队列的队首元素和队尾元素
⑦编写打印队列元素的子程序PrintNode( );
⑧清空队列,连续3次做下列操作:入队4个元素,出队2个元素,打印队列, 打印当前队列的队首元素和队尾元素;
⑨要求:提供尽可能友好的人机对话界面,便于用户(非程序设计使用 者)
【主程序】
#include "stdio.h"
#include "math.h"

struct NODE_TYPE
{
int Data;
struct NODE_TYPE *pNext;
};

struct LINK_QUEUE
{
struct NODE_TYPE *front;
struct NODE_TYPE *rear;
int Length;
};

/*下面为自行建立的自编子程序文件*/
#include "lab8h.h"

main()
{
void PrintNode();
/*下面填写主程序*/
void InitQueue();
int IsEmpty();
void Add();
int Del();
int GetFront();
int GetRear();
void Clear();
void PrintNode();

int judgeEmpty;
int n;
int i;
int x;
int j;

struct LINK_QUEUE *Queue;

printf("Initiate Queue!\n");
InitQueue(Queue);

judgeEmpty=IsEmpty(Queue);
if(judgeEmpty==1)
printf("Queue Empty!\n");
else
printf("Queue is not Empty!\n");

printf("The Lengrh of Queue is:");
scanf("%d",&n);

printf("Please push datas into the Queue that you want\n");
for(i=1;i<=n;i++)
{
printf("\nEnter the %dth data:",i);
scanf("%d",&x);
Add(Queue,x);
}

judgeEmpty=IsEmpty(Queue);
if(judgeEmpty==1)
printf("Queue Empty!\n");
else
printf("Queue is not Empty!\n");

printf("Front of Queue:%d,Rear of Queue:%d\n",GetFront(Queue),GetRear(Queue));

printf("\nNow we've Cleared the Queue,you should do three times like this:Add 4 elements into the Queue ,the System will Delete 2 elements,then we will print the Queue and the Front of Queue,the Rear of Queue\n");
Clear(Queue);
for(i=1;i<=3;i++)
{
printf("\nthe %dth time:\n",i);
for(j=1;j<=4;j++)
{
printf("\tEnter the %dth data:",j);
scanf("%d",&x);
Add(Queue,x);
}
Del(Queue);
Del(Queue);
PrintNode(Queue);
printf("Front of Queue:%d,Rear of Queue:%d\n",GetFront(Queue),GetRear(Queue));

}

getch();
}
********************************************************************
【请每个问题分开回答,可以复制网上内容,但请不要随意乱复制,回答的好的我还会追加到最高(250分)】
********************************************************************
我的邮箱是[email protected]
只知道其中一个问题的也可以回答。
先谢谢大家了。

我有份数据结构的课程设计报告已经发到你邮箱,请参考下吧,以下是代码部分

课程设计步骤简介
1.系统架构建模以及工具的选择
利用Microsoft Visio建模工具规划GUI,为后面的工具选择提供参照(如下图所示)。

2.调试核心排序算法
2.1插入排序算法
private void insertSort(int a[]){ //插入排序算法
for(int i=1;i<a.length;i++)
for(int j=0;j<i;j++) //查找插入位置
{ if(a[j]>a[i])
{int t=a[i];
for(int k=i;k>j;k--) //移动
a[k]=a[k-1];
a[j]=t;
}
}
}

2.2冒泡排序算法
private void bubbleSort(int[] shuzu) {
for(int j=0;j<shuzu.length-1;j++)
for(int i=0;i<(shuzu.length-1)-j;i++)
if(shuzu[i]>shuzu[i+1]) //升序排序
{int temp=shuzu[i]; shuzu[i]=shuzu[i+1]; shuzu[i+1]=temp;} //交换
}

2.3快速排序算法
private void quickSort(int a[],int left,int right) {
if(left<right)
{
int point=quick(a,left,right);
quickSort(a,point+1,right); //分割点右边排序
quickSort(a,left,point-1); //分割点左边排序
}
}
private static int quick(int[] arr,int left,int right){
int i,j,point,temp;
int[] array = arr; i=left; j=right;
point=array[left];//设置分割点
while(i<j) {
while(i<j&&array[j]>=point) //左移
{ --j; }
array[i]=array[j];
while(i<j&&array[i]<=point) //右移
{ ++i; }
array[j]=array[i];
} //换回分割点
array[i]=point;
return j;
}

2.4选择排序算法
private void choseSort(int a[]) {
int min,temp, len=a.length;
for (int i=0;i<len-1 ;i++ )
{
min=i;
for (int j=i+1;j<len ;j++ )
if(a[j]<a[min]) min=j;
if(min!=i) //最值是否有变化
{temp=a[i]; a[i]=a[min];a[min]=temp; }
}
}

2.5 合并排序算法
private void mergeSort(int a[],int p,int r) {

int q;
if(p!=r)
{ //若子序列A中不止一个元素
q=(int)((p+r-1)/2); //计算中间下标,将子序列A分为左子序列和右子序列
mergeSort(a,p,q); //对左子序列进行合并排序
mergeSort(a,q+1,r); //对右子序列进行合并排序
merge(a,p,q,r); //对左子序类和右子序列进行合并
}
}

private void merge(int z[],int p,int q,int r)
{ int temp1[]=new int[z.length];
int i,j,t;
t=p; //序列temp1的下标计数器,从p开始
i=p; //左子序A[P..Q]的下标计数器,从p开始
j=q+1; //右子序A[Q+1..R]的下表计数器,从q+1开始
//合并序列
while(t<=r)
if(i<=q&&(j>r||z[i]<=z[j]))
temp1[t++]=z[i++];
else
temp1[t++]=z[j++];
//将temp1中的序列赋值给A
for(i=p;i<=r;i++)
z[i]=temp1[i];
}

2.6二分插入排序算法
private void halfSort(int[] a) {
for (int i=1;i<a.length ;i++ )
{
int left=0,right=i-1;
int temp=a[i];
while(left<=right)
{
int middle=(left+right)/2;
if(temp<a[middle])
right=middle-1;
else
left=middle+1;
}
for(int j=i-1;j>=left;j--)
a[j+1]=a[j];
a[left]=temp;
} }
3. 设计常产生随机数的算法
public int[] randdata(){
int choice=jComboBox1.getSelectedIndex();
int index[]={100,500,1000,5000};
int[] data=new int[index[choice]];
java.util.Random r=new java.util.Random(); //利用java产生随机数的函数
switch(choice){ //产生的随机数在0-4999之间
case 0: {
for(int i=0;i<100;i++) //产生100个随机数组
data[i]=Math.abs(r.nextInt())%5000; break;
}
case 1: {
for(int i=0;i<500;i++) //产生500个随机数组
data[i]=Math.abs(r.nextInt())%5000; break;
}
case 2: {
for(int i=0;i<1000;i++) //产生1000个随机数组
data[i]=Math.abs(r.nextInt())%5000; break;
}
case 3: {
for(int i=0;i<5000;i++) //产生5000个随机数组
data[i]=Math.abs(r.nextInt())%5000;
} }// end swhitch
return data; //回传产生的随机数组
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-18
已经发到你邮箱了。记得给分。本回答被提问者采纳
第2个回答  2010-06-13
这个我也提问过 就是没人给回复。。。祝楼主好运吧
相似回答