您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 关于数据结构 程序可运行 其他功能没问题 但是自定义顺序表时出错 求调试

关于数据结构 程序可运行 其他功能没问题 但是自定义顺序表时出错 求调试

来源:网络整理     时间:2016/7/17 2:26:28     关键词:

关于网友提出的“ 关于数据结构 程序可运行 其他功能没问题 但是自定义顺序表时出错 求调试”问题疑问,本网通过在网上对“ 关于数据结构 程序可运行 其他功能没问题 但是自定义顺序表时出错 求调试”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于数据结构 程序可运行 其他功能没问题 但是自定义顺序表时出错 求调试
描述:

本帖最后由 bendansasa 于 2011-06-17 03:48:45 编辑

#include "stdio.h"
#define max 6
typedef struct/*定义线性表*/
{
  int data[max+1];
  int last;
}sxb;
sxb *chushihua()  /*初始化*/
{
  sxb *L;
  L=(sxb *)malloc(sizeof(sxb));
  L->last=0;
  return L;
}
int chazhaoz(sxb *L,int i)
    {
      int x=0,z=0;
        for (z=0; z<=L->last; ++z)
        if (L->last==-1)
          {
            printf("表中没有元素,请插入数据后在操作\n");
            return (0);
          }
        if (i>L->last)
          {
            printf("超出了范围,请看清在输入要查找的下标的值\n");
            return (-1);
          }
        else if (i>=0&&i<=z)
            {
              x=L->data[i];
              printf("下标为%d的数据为:%4d",i,x);
              return (1);
            }
    }
int charu(sxb *LL,int i,int x)
  {    int j;
     if(LL->last==max-1)
     {
       printf("表满");
       return (-1);
     }
     if(i<0||i>=LL->last+2)
      {
       printf("位置出错");
       return 0;
      }
    for(j=LL->last;j>=i;j--)
    LL->data[j+1]=LL->data[j];
     LL->data[i]=x;
   LL->last++;
   return 1;
}
charushuju(sxb *LL,int i,int x) /*插入*/
{
  int j;
  if(LL->last==max)
  {printf("表满");return(0);}
  if(i<1||i>=LL->last+2)
  {printf("位置错误");return(-1);}
  for(j=LL->last;j>=i;j--)
    LL->data[j+1]=LL->data[j];
  LL->data[i]=x;
  LL->last++;
  return(1);
}
gengxinshuju(sxb *LL,int i,int x) /*更新*/
{
  LL->data[i]=x;
}
int shangchu(sxb *L,int i) /*删除*/
{ int j;
  if(i<1||i>L->last)
   {printf("不存在第i个元素");return(0);}
  for(j=i;j<=L->last;j++)
    L->data[j-1]=L->data[j];
  L->last--;
  return(1);
}
biaochang(sxb *L)/*求表长*/
{
  printf("当前表长为:  %d\n",L->last);
}
int Search_Bin (sxb *L,int k) /*二分法查找*/
{
  int low=1,high=L->last,mid;
  while(low<=high)
  {
     mid=(low+high)/2;
     if(k==L->data[mid])
         return  mid;       
     else  if (kdata[mid])
         high=mid-1;
     else low=mid+1;
  }
     return(0);        
}
int ListTraverse(sxb *L)  /*遍历顺序表*/
{ int i;
    for(i=1;i<=L->last;i++)
     printf("%d,",L->data[i]);
    printf("\n");
    }
void paixu(sxb *L)/*希尔排序*/
{
  int n=4;
  int i,j,t;
  n=n/2;
  while(n>0)
  {
    for(i=1;i+n<=L->last;i++)
    {
      j=i;
    while(j+n<=L->last)
    {
      if(L->data[j]>L->data[j+n])
      {t=L->data[j];L->data[j]=L->data[j+n];L->data[j+n]=t;}
      j=j+n;
    }
    }
    n=n/2;
   }

int Show(sxb *L)/*输出*/
{  int i;
   for(i=1;i<=L->last;i++)
       printf("%3d,",L->data[i]);
   printf("\n");
}
main()
{
  sxb *L1;
  int i,a,flag,j;
  system("graftabl 936");
  clrscr();
  L1=chushihua();
  printf("\n ____________________________________________________________________");
  printf("\n|    1. 创建线性表                                                   |");
  printf("\n|    2. 在顺序表的第i个元素前插入一个元素。                          |");
  printf("\n|    3. 更新顺序表中第i个元素的值。                                  |");
  printf("\n|    4. 用希尔排序对顺序表进行排序。                                 |");
  printf("\n|    5. 用二分法查找值为x的元素的位置。                              |");
  printf("\n|    6. 在顺序表的第i个元素前删除一个元素。                          |");
  printf("\n|    7. 显示线性表表长                                               |");
  printf("\n|    8. 输出线性表的元素                                             |");
  printf("\n|    9. 遍历顺序表                                                   |");
  printf("\n|    11.在顺序表中查找第i个元素                                      |");
  printf("\n|    0. 返回                                                |");
  printf("\n --------------------------------------------------------------------");
  printf("\n请选择你要做的功能\n");
  scanf("%d",&flag);
  while(flag!=0)
  {
  switch(flag)
  {
    case 1:
                                  j=0;
                                printf("输入要插入的数据:");
                                scanf("%4d",&a);
                                while (jlast+2&&j>=0&&a!=0)
                                   {
                                     charu(L1,j,a);
                                     j++;
                                     scanf("%4d",&a);
                                   }
                                break;
    case 2:
    printf("输入要插入数据位置i:\n");
    scanf("%d",&i);
    printf("输入要插入的数据为:\n");
    scanf("%d",&a);
    charushuju(L1,i,a);
    printf("插入后表内数据为:\n");
    Show(L1);
    break;
    case 3:
    printf("输入要更新数据位置i:\n");
    scanf("%d",&i);
    printf("输入要更新的数据为:\n");
    scanf("%d",&a);
    gengxinshuju(L1,i,a);
    printf("更新后表内数据为:\n");
    Show(L1);
    break;
    case 4:
    printf("排序后为:\n");
    paixu(L1);
    Show(L1);
    break;
    case 5:
    printf("输入你想查找的数:\n");
    scanf("%d",&a);
    printf("该数所在的位置为:\n");
    printf("%d",Search_Bin(L1,a));
    printf("\n");
    break;
    case 6:
    printf("\n输入要删除数的位置:\n");
    scanf("%d",&a);
    shangchu(L1,a);
    printf("删除后表内数据为:\n");
    Show(L1);
    break;
    case 7:
    biaochang(L1);
    break;
    case 8:
    printf("顺序表内数据为:\n");
    Show(L1);
    break;
     case 9: ListTraverse(L1);
     break;
     default:flag=1;
                       case 11:  printf("输入要查找的下标:");
                                  scanf("%4d",&a);
                                  chazhaoz(L1,a);
                                  break;
  }
  printf("\n请选择你要做的功能\n");
  scanf("%d",&flag);
  }
  getch();
}

解决方案1:

调试修改完毕


#include "stdio.h"
#include "stdlib.h"
#define max 6
typedef struct/*定义线性表*/
{
  int data[max+1];
  int last;
}sxb;
sxb *chushihua()  /*初始化*/
{
  sxb *L;
  L=(sxb *)malloc(sizeof(sxb));
  L->last=0;
  return L;
}
int chazhaoz(sxb *L,int i)
{
int x=0,z=0;
if (L->last==-1)
{
printf("表中没有元素,请插入数据后在操作\n");
return (0);
}
if (i>L->last||i<0)
{
printf("超出了范围,请看清在输入要查找的下标的值\n");
return (-1);
}
x=L->data[i];
printf("下标为%d的数据为:%4d",i,x);
return (1);
}
int charu(sxb *LL,int i,int x)
  {    int j;
     if(LL->last==max-1)
     {
       printf("表满");
       return (-1);
     }
     if(i<0||i>=LL->last+2)
      {
       printf("位置出错");
       return 0;
      }
    for(j=LL->last;j>=i;j--)
    LL->data[j+1]=LL->data[j];
     LL->data[i]=x;
   LL->last++;
   return 1;
}
int charushuju(sxb *LL,int i,int x) /*插入*/
{
  int j;
  if(LL->last==max)
  {printf("表满");return(0);}
  if(i<1||i>=LL->last+2)
  {printf("位置错误");return(-1);}
  for(j=LL->last;j>=i;j--)
    LL->data[j+1]=LL->data[j];
  LL->data[i]=x;
  LL->last++;
  return(1);
}
void gengxinshuju(sxb *LL,int i,int x) /*更新*/
{
  LL->data[i]=x;
}
int shangchu(sxb *L,int i) /*删除*/
{ int j;
  if(i<1||i>L->last)
   {printf("不存在第i个元素");return(0);}
  for(j=i;j<=L->last;j++)
    L->data[j-1]=L->data[j];
  L->last--;
  return(1);
}
void biaochang(sxb *L)/*求表长*/
{
  printf("当前表长为:  %d\n",L->last);
}
int Search_Bin (sxb *L,int k) /*二分法查找*/
{
  int low=1,high=L->last,mid;
  while(low<=high)
  {
     mid=(low+high)/2;
     if(k==L->data[mid])
         return  mid;       
     else  if (kdata[mid])
         high=mid-1;
     else low=mid+1;
  }
     return(0);        
}
void ListTraverse(sxb *L)  /*遍历顺序表*/

int i;
    for(i=1;i<=L->last;i++)
     printf("%d,",L->data[i]);
    printf("\n");
}
void paixu(sxb *L)/*希尔排序*/
{
  int n=4;
  int i,j,t;
  n=n/2;
  while(n>0)
  {
    for(i=1;i+n<=L->last;i++)
    {
      j=i;
    while(j+n<=L->last)
    {
      if(L->data[j]>L->data[j+n])
      {t=L->data[j];L->data[j]=L->data[j+n];L->data[j+n]=t;}
      j=j+n;
    }
    }
    n=n/2;
   }

void Show(sxb *L)/*输出*/
{  
int i;
for(i=1;i<=L->last;i++)
       printf("%3d,",L->data[i]);
printf("\n");
}
void main()
{
  sxb *L1;
  int i,a,flag,j;
  system("graftabl 936");
  clrscr();
  L1=chushihua();
  printf("\n ____________________________________________________________________");
  printf("\n|    1. 创建线性表                                                   |");
  printf("\n|    2. 在顺序表的第i个元素前插入一个元素。                          |");
  printf("\n|    3. 更新顺序表中第i个元素的值。                                  |");
  printf("\n|    4. 用希尔排序对顺序表进行排序。                                 |");
  printf("\n|    5. 用二分法查找值为x的元素的位置。                              |");
  printf("\n|    6. 在顺序表的第i个元素前删除一个元素。                          |");
  printf("\n|    7. 显示线性表表长                                               |");
  printf("\n|    8. 输出线性表的元素                                             |");
  printf("\n|    9. 遍历顺序表                                                   |");
  printf("\n|    11.在顺序表中查找第i个元素                                      |");
  printf("\n|    0. 返回                                                |");
  printf("\n --------------------------------------------------------------------");
  printf("\n请选择你要做的功能\n");
  scanf("%d",&flag);
  while(flag!=0)
  {
  switch(flag)
  {
case 1:
j=0;
printf("输入要插入的数据:");
scanf("%4d",&a);
while (jlast+2&&j>=0&&a!=0)
{
charu(L1,j,a);
j++;
scanf("%4d",&a);
}
break;
case 2:
printf("输入要插入数据位置i:\n");
scanf("%d",&i);
printf("输入要插入的数据为:\n");
scanf("%d",&a);
charushuju(L1,i,a);
printf("插入后表内数据为:\n");
Show(L1);
break;
case 3:
printf("输入要更新数据位置i:\n");
scanf("%d",&i);
printf("输入要更新的数据为:\n");
scanf("%d",&a);
gengxinshuju(L1,i,a);
printf("更新后表内数据为:\n");
Show(L1);
break;
case 4:
printf("排序后为:\n");
paixu(L1);
Show(L1);
break;
case 5:
printf("输入你想查找的数:\n");
scanf("%d",&a);
printf("该数所在的位置为:\n");
printf("%d",Search_Bin(L1,a));
printf("\n");
break;
case 6:
printf("\n输入要删除数的位置:\n");
scanf("%d",&a);
shangchu(L1,a);
printf("删除后表内数据为:\n");
Show(L1);
break;
case 7:
biaochang(L1);
break;
case 8:
printf("顺序表内数据为:\n");
Show(L1);
break;
 case 9: ListTraverse(L1);
 break;
 case 11:  printf("输入要查找的下标:");
  scanf("%4d",&a);
  chazhaoz(L1,a);
  break;
  default:flag=1;break;
  }
  printf("\n请选择你要做的功能\n");
  scanf("%d",&flag);
  }
  getch();
}

解决方案2:

设个断点自己慢慢调呗!


以上介绍了“ 关于数据结构 程序可运行 其他功能没问题 但是自定义顺序表时出错 求调试”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2735428.html

相关图片

相关文章