回 帖 发 新 帖 刷新版面

主题:我才开始学数据结构~遇到个问题希望大家帮帮忙~

是线形表的一个问题
设计一个算法将x插入到一个有序(从小到大)的线性表(顺序存储结构)的适当位置上,以保证线性表的有序性.
#include <stdio.h>
#define maxlen 20
void insertsqlist(int x,int s[],int *np)
{
 int n;
 n=*np;
 if(n==0)
  s[n]=x;
 else
 {
  while(s[n-1]>x)
  {
   s[n]=s[n-1];
   n=n-1;
  }
  s[n]=x;
 }
  ++(*np);
}
void print(int s[],int *np)
{
 int i,n;
 n=*np;
 for(i=0;i<n;i++)
 {
   printf("%d",s[i]);
 }
 printf("\n");
}
main()
{
 int a[maxlen]={11,33,55,66,77,88,99};
 int c,*e;
 c=22;
 *e=7;
 print(a,e);
 insertsqlist(c,a,e);
 print(a,e);
}
这个程序有错误么?为什么TC总是执行不了?
谢谢~[em18]

回复列表 (共6个回复)

沙发

if(n==0);
中有个分号,这样使得后面的else没有匹配;

板凳

晕,谢谢~是个小错误却没发现~还问了好多同学~不过貌似还有错误~是主函数里面的~但是找不出来~

3 楼


#include <stdio.h>
#define maxlen 20
void insertsqlist(int x,int s[],int *np)
{
 int n;
 n=*np;
 if(!n)
  s[0]=x;
 else
 {
  while(s[n-1]>x)
  {
   s[n]=s[n-1];
   n=n-1;
  }
  s[n]=x;
 }
  ++(*np);
}
void print(int s[],int *np)
{
 int i,n;
 n=*np;
 for(i=0;i<n;i++)
 {
   printf("%4d",s[i]);
 }
 printf("\n");
}
main()
{
 int a[maxlen]={11,33,55,66,77,88,99};
 int c,*e;
 e=(int *)malloc(sizeof(int)) ;
 c=100;
 *e=7;
 print(a,e);
 insertsqlist(c,a,e);
 print(a,e);
 getch();
}

4 楼

我觉得这样更好
#include <stdio.h>
#define maxlen 20
void insertsqlist(int x,int s[],int np)
{


 if(np==0)
  s[np]=x;
 else
 {
  while(s[np-1]>x)
  {
   s[np]=s[np-1];
   np=np-1;
  }
  s[np]=x;
 }
  ++(np);
}
void print(int s[],int np)
{
 int i;
 np=0;
 while(s[np])
  {
   printf("%3d",s[np]);
   np++;
   }
 printf("\n");
}
main()
{
 int a[maxlen]={11,33,55,66,77,88,99};
 int c,e;
 c=22;
 e=7;
 print(a,e);
 insertsqlist(c,a,e);
 print(a,e);
 getch();
}

5 楼

把if(n==0);中的';'去掉,
再在ELSE那一层的花括弧后加';'
最后我认为应该在输出中用空格把各个数据隔开

如:
for(i=0;i<n;i++)
printf("5d%",s[i]);

6 楼

对啊,把你程序里的所有指针改为int 变量就行了。
因为你不需要传递数组和函数返回值,所以这里不需要

我来回复

您尚未登录,请登录后再回复。点此登录或注册