首页 新闻 赞助 找找看

动态数组增加长度后的小问题C语言,求高手指导

0
悬赏园豆:50 [待解决问题]

#include <iostream.h>

#include <stdlib.h>

int main()

{  

int*n,*head;

 int i,j,temp;

 int k=0;//记录当前数组长度

 int MAX=3;//设置数组个数

 n=(int*)calloc(MAX,sizeof(int));//创建动态数组  

head=n;//记录不用增加动态数组长度时的头指针  

cin>>i;//输入数组元素的值    

while(i!=0&&k<MAX)

 {  

 *n=i;//给当前数组元素赋值  

 k++;//数组长度加一  

 cin>>i;//输入下一个数组元素的值       

  if(k==MAX)//数组已满

  {    

  MAX=MAX+3;//重设数组长度  

    n=(int*)realloc(n,(MAX)*sizeof(int));//增加数组长度(调试时到这一句就中断)

     head=n;//记录新动态数组头指针    

  n=n+(MAX-4);//返回已赋好值的那个节点  

 }  

 n++;//数组元素下移一位

 }   

n=NULL;//把最后多下移一位的值悬空

 n=head;//返回头指针

 //下面的程序正确,数组不需要增加长度时就正确,一增加就错误

 for(i=0;i<k-1;i++)  {   for(j=i+1;j<k;j++)   {    if(*n>*(n+1))    {     temp=*n;     *n=*(n+1);     *(n+1)=temp;    }    n++;   }   n=head;  }  n=head;  for(i=0;i<k;i++)  {   cout<<*n<<"\t";   n++;  }  n=head;  free(n);  return 0; }

zhengzhiqiang的主页 zhengzhiqiang | 初学一级 | 园豆:12
提问于:2014-03-25 14:28
< >
分享
所有回答(2)
0

是实现不了吗?还是觉得方法不好?你这样用n*2的空间来实现冒泡排序没有必要.

你可以去学下怎么用堆排序.

要冒泡排序的话最好还是双向链表.这样节点之间交换起来会很方便

吴瑞祥 | 园豆:29449 (高人七级) | 2014-03-25 16:35

实现不了

支持(0) 反对(0) zhengzhiqiang | 园豆:12 (初学一级) | 2014-03-25 17:29
0

n=(int*)realloc(head,(MAX)*sizeof(int));

zhengzhiqiang | 园豆:12 (初学一级) | 2014-04-07 19:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册