这是我关于排序的数据结构程序,我的程序有问题,修改多次后还是有错误,希望有人帮我改一改,非常感谢!
运行环境:Dev-C++
再次谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <windows.h>
#define MAXSIZE 11
#define MAXNUMOFBASE 21
#define extent 10
#define readFileName"【程序源码4-4】静态链表插入排序-读入数据.txt"
#define outFileName"【程序源码4-4】静态链表插入排序-结果文件.txt"
struct node
{
int data;
int next;
};
int data[MAXSIZE]={9999,17,60,1,12,5,7,63,30,87,3};
void file1(void);
void showmenu(void);
void clearscreen();
int userchoice(void);
void simpleselectsort(int data[],int length);
void display(int data[],int length);
void readfiledata(node data[]);
void display(node data[]);
void staticlinklistinsertsort(node data[]);
void outputresultstoafile(node data[],int flags);
void processmenu(int menuchoice);
//函数功能:菜单
void showmenu(void)
{
puts("***************功能菜单***************\n");
puts("*1.排序法1(简单选择排序法) *\n");
puts("*2.排序法2(静态链表排序法) *\n");
puts("*3.本章主要概念收获 *\n");
puts("*0.结束程序 *\n");
puts("**************************************\n");
printf("请输入您的选择:(0-3)");
}
//函数功能:遍历所有数据
void display(int data[],int length)
{
int i;
for(i=1;i<length;i++)
{
printf("%d",data[i]);
}
printf("\n");
}
//函数功能:完成元素的排序
void simpleselectsort(int data[],int length)
{
int term;
int i,j,item;
for(term=1;term<length;term++)
{
item=data[term];
for(i=term;i<length;i++)
if(data[i]<=item)
{
item=data[i];
j=1;
}
data[j]=data[term];
data[term]=item;
}
}
//函数功能:从文件读入数据
void readfiledata(node data[])
{
FILE *in;
int i;
if((in=fopen(readFileName,"rb"))==NULL)
{
printf("文件打不开或不存在!\n");
exit(0);
}
for(i=1;i<=extent;i++)
{
fscanf(in,"%d",&data[i].data);
data[i].next=i;
}
fclose(in);
}
//函数功能:遍历数据
void display(node data[])
{
int i;
for(i=1;i<=extent;i++)
printf("%d",data[i].data);
printf("\n");
}
//函数功能:静态链表插入排序
void staticlinklistinsertsort(node data[])
{
int i,position,tempdata,tempposit;
data[0].next=0;
for(i=1;i<=extent;i++)
{
position=data[0].next;
if(data[i].data<data[position].data)
{
data[0].next=i;
data[i].next=position;
}
else
{
while(data[i].data>data[position].data&&data[position].next!=0)
{
tempdata=position;
position=data[position].next;
}
if(data[i].data<data[position].data||data[position].next!=0)
{
data[tempdata].next=i;
data[i].next=position;
}
else
{
data[position].next=i;
data[i].next=0;
}
}
}
tempposit=data[0].next;
for(i=1;i<=extent;i++)
{
while(tempposit<i)
tempposit=data[tempposit].next;
position=tempposit;
tempdata=data[position].data;
tempposit=data[position].next;
data[position].data=data[i].data;
data[position].next=data[i].next;
data[i].data=tempdata;
data[i].next=position;
}
}
//函数功能:输出结果到文件
void outputresultstoafile(node data[],int flags)
{
FILE *out;
int i;
if((out=fopen(outFileName,"a"))==NULL)
{
printf("结果保存失败!原因可能是不存在文件。");
}
if(flags==0)
{
fprintf(out,"原始数据为:\n");
for(i=1;i<=extent;i++)
fprintf(out,"%d",data[i].data);
fprintf(out,"\n");
}
else
{
fprintf(out,"排序后的数据为:\n");
for(i=1;i<=extent;i++)
fprintf(out,"%d",data[i].data);
fprintf(out,"\n");
}
fclose(out);
}
//函数功能:本章主要概念收获
void file1(void)
{
char str[1000];
FILE *fp=fopen("k软件201-48-陈可盈-本章主要概念收获.txt","r");
if(fp==NULL)
{
printf("文件打开失败\n");
exit(0);
}
while(!feof(fp))
{
if(fgets(str,100,fp)==NULL)
break;
printf("%s",str);
}
}
//函数功能:清屏
void clearscreen()
{
system("cls");
}
//函数功能:用户的选择
int userchoice(void)
{
int menuchoice;
printf("请输入您的选择:");
scanf("%d",&menuchoice);
return menuchoice;
}
//函数功能:执行用户选择的功能
void processmenu(int menuchoice)
{
int data[MAXSIZE]={9999,17,60,1,12,5,7,63,30,87,3};
switch(menuchoice)
{
node data[MAXNUMOFBASE];
char choose;
case 1:
system("color f0");
printf("**********************\n");
printf("* 简单选择排序法 *\n");
printf("**********************\n");
printf("已从内部数组创建好10个数据.\n排序前:\n");
display(data,MAXSIZE);
simpleselectsort(data,MAXSIZE);
printf("排序后为:\n");
display(data,MAXSIZE);
system("pause");
return;
break;
case 2:
system("color f0");
printf("**********************\n");
printf("* 静态链表排序法 *\n");
printf("**********************\n");
readfiledata(data);
printf("已从文件中读取10个待排数据如下...\n");
display(data);
outputresultstoafile(data,0);
printf("排序后的结果为:\n");
staticlinklistinsertsort(data);
display(data);
outputresultstoafile(data,1);
printf("结果已保存到文件,是否查看(Y/N)?\n");
choose=getchar();
fflush(stdin);
if(choose=='Y'||choose=='y')
ShellExecute(NULL,"open",outFileName,NULL,NULL,SW_SHOWNORMAL);
return;
system("pause");
break;
case 3:
SetConsoleTitle("本章主要概念收获");
system("color f0");
while(1)
{
system("cls");
puts("文件读取如下:");
file1();
puts("\n文件读取完毕!");
break;
}
return;
system("pause");
break;
case 0:
puts("\n您已经成功退出本系统,欢迎再次使用!!!");
system("pause");
exit(1);
default:
puts("对不起,您输入的功能编号有错!请重新输入!!!");
break;
}
}
//函数功能:主函数
int main(void)
{
int menuchoice;
system("color f0");
clearscreen();
while(1)
{
showmenu();
menuchoice=userchoice();
processmenu(menuchoice);
system("pause");
clearscreen();
}
}
有两个display()函数哈