计算机系统

 

数据结构C语言顺序表的排序和删除问题
顺序表定义的长度为10000,此时程序可以正常运行;把顺序表长度改成500000,程序出错,不能运行。求问大神是哪里出了错误,还是要提高存储上限?如何改正?#include
#include
#include
typedef int ElemType;
#define MAX 10000
typedef struct{
ElemType *elem;
int length;
}SqList;

#include <stdio.h>

void InitList(SqList &L){
L.elem = (ElemType *)malloc(MAX*sizeof);
free;
L.elem = (ElemType *)malloc(MAX*sizeof);
L.length = MAX;
}//初始化顺序表

 #include <stdlib.h>

void Merge(ElemType SR[],ElemType TR[],int i,int m ,int n){
int j,k;
for(j=m+1,k=i;i<=m&&j<=n;k++){
if(SR[i]<=SR[j])
TR[k]=SR[i++];
else TR[k] = SR[j++];
}
while TR[k++] = SR[i++];
while TR[k++] = SR[j++];
}// 将有序的SR[i..m]和SR[m+1..n]归并为有序的TR[i..n]
void Msort( ElemType SR[], ElemType TR1[], int s, int t ){
int k;
ElemType TR2[MAX];
if TR1[s] = SR[s];
else
{
k = /2;
Msort(SR,TR2,s,k);
Msort(SR,TR2,k+1,t);
Merge(TR2,TR1,s,k,t);
}
}// 对SR[s..t]进行归并排序,排序后的记录存入TR1[s..t]
void SelectSort(SqList &L){
int i,j,k;
ElemType temp;
int n=L.length;
for(i=1;i<n;i++){
k = i;
for(j=i+1;j<=n;j++)
if(L.elem[j]<L.elem[k])
k=j;
if{
temp = L.elem[i];
L.elem[i] = L.elem[k];
L.elem[k] = temp;
}
}
}//简单选择排序的实现

#include <string.h>

int QKPass(ElemType s[],int left,int right){
ElemType x = s[left];
while(left while{
right--;
}
if(left s[left] = s[right];
left++;
}
while(left left++;
}
if(left s[right] = s[left];
right--;
}
}
s[left] = x;
return left;
}//一趟快速排序算法
void HeapAdjust (SqList &H, int s, int m){
H.elem[0] = H.elem[s];
int j;
H.elem[0] = H.elem[s];
for(j = 2*s ; j if(j j++;
if(H.elem[0]>=H.elem[j])
break;
H.elem[s] = H.elem[j];
s = j;
}
H.elem[s] = H.elem[0];
}//保存大顶堆的根元素后,对大顶堆的调整
void HeapSort (SqList &H){
int i ;
ElemType temp;
for(i=H.length/2;i>1;i--)
HeapAdjust(H,i,H.length);
temp = H.elem[0];
H.elem[0] = H.elem[H.length];
H.elem[H.length] = temp;
for(i = H.length-1;i>1;i--){
HeapAdjust;
temp = H.elem[1];
H.elem[1] = H.elem[i];
H.elem[i] = temp;
}
}//建立大顶堆,实现堆排序

 #define MAX_TABLE  50 

void BubbleSort(SqList &L){
int n = L.length,change = 1;
int i,j;
ElemType temp;
for(i=1;i change = 0;
for(j=1;j if(L.elem[i]>L.elem[j]){
temp = L.elem[i];
L.elem[i] = L.elem[j];
L.elem[j] = temp;
change = 1;
}
}
}//冒泡排序算法实现

typedef struct {   

void QKsort(ElemType s[],int low,int high){
int pos;
if(low<high){
pos = QKPass(s,low,high);
QKsort(s,low,pos-1);
QKsort(s,pos+1,high);
}
}//递归实现快序排序
void DeleteItem(SqList &L,ElemType item){
int i;
for(i=1;i<L.length;i++)
if(L.elem[i]==item){
L.elem[i] = L.elem[--L.length];
free(&L.elem[L.length]);
}
}//删除与item相同元素

char  name[15];   

int main(){
double t1,t2;
int i;
SqList L1,L2;
int k;
printf("**************************************n");
printf;
printf("1、二路归并排序n");
printf("2、堆排序n");
printf("3、冒泡排序n");
printf("4、快速排序n");
printf("5、直接插入排序n");
printf("6、删除与Item相同元素n");
printf("**************************************n");
do{
InitList;
InitList;
scanf("%d",&k);
for(i=1;i<L1.length;i++)
L1.elem[i] = rand()%MAX;
for(i=1;i<L2.length;i++)
L2.elem[i]=i;
switch{
case 0:break;
case 1:
printf("n********二路归并排序******n");
t1=clock();
Msort(L1.elem,L1.elem,1,L1.length-1);
t1 = clock() - t1;
t2=clock();
Msort(L2.elem,L2.elem,1,L2.length-1);
t2 = clock()- t2;

int  score;   

 break; case 2: printf("n**********堆排序*********n"); t1=clock(); HeapSort; t1 = clock() - t1; t2=clock(); HeapSort; t2=clock() - t2; break; case 3: printf("n*********冒泡排序********n"); t1=clock(); BubbleSort; t1 = clock() - t1; t2=clock(); BubbleSort; t2=clock() - t2; break; case 4: printf("n*********快速排序********n"); t1=clock(); QKsort(L1.elem,1,L1.length-1); t1 = clock() - t1; t2=clock(); QKsort(L2.elem,1,L2.length-1); t2=clock() - t2; break; case 5: printf("n********直接插入排序******n"); t1=clock(); SelectSort; t1 = clock() - t1; t2=clock(); SelectSort; t2=clock() - t2; break; case 6: t1=clock(); DeleteItem; t1=clock()-t1; for(i=1;i<L1.length;i++) printf("%d ",L1.elem[i]); break; default : printf("n输入错误!nn");}if(0<k&&k<6){ printf("n该排序无序表排序时间:%f毫秒n",t1); printf("n该排序有序表排序时间:%f毫秒nn",t2);}else if printf("n删除元素的时间为%f毫秒n",t1);}while;return 0;

int mingci; }Stud; 

}

typedef struct {

Stud *elem;   

int length;

}Student; 

void  CreateTable( Student  &ST )     //建立学生基本情况表

 {    int  i, sc;    char name1[15];   

ST.elem = (Stud*)malloc(MAX_TABLE*sizeof(Stud));   

ST.length = 0;   

printf( “输入学生基本情况(成绩以0表示结束)n” );   

printf( “输入姓名及成绩n” );   

scanf("%s%d",name1,&sc);  

while( sc > 0 )    {   strcpy( ST.elem[ST.length].name, name1 );        ST.elem[ST.length++].score = sc;       

scanf("%s%d",name1,&sc);    }   

for( i=0; i<ST.length; i++ )    

 ST.elem[i].mingci = 0; } 

void Output( Student ST )   //输出学生的基本情况

 {   

int  i;   

printf( “      姓名    成绩   名次n” );   

 for( i =0; i < ST.length; i++ )       

printf( “ %10s%6d%6dn”, ST.elem[i].name, ST.elem[i].score, ST.elem[i].mingci );    printf( “n” );

void InsertSort( Student &ST )    //插入排序

 {  

 int i, j ;   

Stud temp;   

for( i=1; i< ST.length; i++ )      

if( ST.elem[i].score>ST.elem[i-1].score )     

 {  

temp = ST.elem[i];          

ST.elem[i] = ST.elem[i-1];         

 for( j = i-2; j >= 0 && ST.elem[j].score < temp.score; j-- )              

ST.elem[j+1] = ST.elem[j];           

ST.elem[j+1] = temp;      

}   

ST.elem[0].mingci = 1;  

for( i=1; i < ST.length; i++ )      

if( ST.elem[i].score == ST.elem[i-1].score )          

ST.elem[i].mingci = ST.elem[i-1].mingci;

else ST.elem[i].mingci = ST.elem[i-1].mingci+1;

void BubbleSort( Student &ST )     //冒泡排序

{   

int i, j;   

Stud temp;   

for( i = 0; i < ST.length; i++ )    

 for( j = 0; j < ST.length-i-1; j++ )        

if( ST.elem[j].score < ST.elem[j+1].score )        

{  

temp =  ST.elem[j];  

ST.elem[j] = ST.elem[j+1];            

ST.elem[j+1] = temp;       

 }   

ST.elem[0].mingci = 1;   

for( i=1; i < ST.length; i++ )      

if( ST.elem[i].score == ST.elem[i-1].score )          

ST.elem[i].mingci = ST.elem[i-1].mingci;      

else ST.elem[i].mingci = ST.elem[i-1].mingci+1;

void SelectSort( Student &ST )   //选择排序

{  

 int i, j, k;   

Stud temp;   

for( i = 0; i < ST.length; i++ )   

k = i;     

 for( j = i+1; j<ST.length; j++ )         

if( ST.elem[k].score < ST.elem[j].score )              

k = j;      

if ( k != i )      

{  

 temp =  ST.elem[i]; 

 ST.elem[i] = ST.elem[k];           

ST.elem[k] = temp;     

 }   

}   

ST.elem[0].mingci = 1;   

for( i=1; i < ST.length; i++ )     

 if( ST.elem[i].score == ST.elem[i-1].score )           

ST.elem[i].mingci = ST.elem[i-1].mingci;      

else ST.elem[i].mingci = ST.elem[i-1].mingci+1;

void QuickSort( Student &ST )     //非递归的快速

struct Stack{      

int low;      

int high;

 }S[20];  

 int low1, high1, i, j, top;  

 Stud temp;   

 if( ST.length>0 )

{       top=0;       S[top].low = 0;  S[top++].high = ST.length-1;      

while( top )      

{           i = low1 = S[--top].low;           j = high1 = S[top].high;         

 temp = ST.elem[i];          

while( i < j )          

{                

while( i < j && ST.elem[j].score > temp.score )                    j--;                if( i < j )  

{

ST.elem[i] = ST.elem[j] ; i++; 

其他新闻
  • AndroidStudio 本身就慢,启动时还自动打开上次的项目,然后如果不是自己要的项目,又得Close Project。 1、设置成Eclipse快捷键 设置成Eclipse快捷键 Settings -Keymap,在Keymaps下拉列表中选择...
    2020-01-17
  • Android 日期时间-new Date() 及其格式化、System.currentTimeMillis() Android 日期时间-new Date()的坑 Android 日期时间-Calendar 代替 new Date()仍有坑 Android日期时间-日期与字符串相互转换的坑 一、...
    2020-01-17
  • 程序在手机上调试运行成功,签名生成APK 也成功,但是在手机上安装居然失败。 android studio 升级2.3之后,签名打包需要选择Signature versions,如下图 原来签名时,Signature Versions 不能只...
    2020-01-17
友情链接

公司名称巴黎人电玩
版权所有:Copyright © 2015-2019 http://www.zhongqiangjy.com. 巴黎人电玩有限公司 版权所有

友情链接

Copyright © 2015-2019 http://www.zhongqiangjy.com. 巴黎人电玩有限公司 版权所有
公司地址http://www.zhongqiangjy.com