| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1521 人关注过本帖
标题:求大佬指出问题,困扰了几天了..
只看楼主 加入收藏
w1031271617
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2017-10-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
求大佬指出问题,困扰了几天了..
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct
{
    int data[MAX];
    int length;
} seqlist;
void creat(seqlist *L)
    {
    L->length=0;
   
}

int inset(seqlist *L,int i,int d)/*插入1*/
{
    int j;
    if(i<1||i>L->length+3)
    {printf("错误位置\n");return 0;}
    if(L->length==MAX-1)
     {printf("表满,不能插入");return 0;}
     for(j=L->length+1;j>=i-1;j--)
     L->data[j+1]=L->data[j];
     L->data[i-1]=d;
     L->length++;
     return 1;
}
int delete_seqlist(seqlist *L,int i)/*删除1*/
{
    int j=0;
    if(i<0||i>L->length+1)
    {printf("位置错误\n");return 0;}
    for(j=i;j<=L->length;j++)
       L->data[j-1]=L->data[j];
    L->length--;
    return 1;
}
void hebing(seqlist a,seqlist b,seqlist *c)/*合并*/
{
    int i=0,j=0,k=0;
    while(i<=a.length&&j<=b.length)
    if(a.data[i]<b.data[j])
      c->data[k++]=a.data[i++];
      else
      c->data[k++]=b.data[j++];
   while(i<=a.length)
     c->data[k++]=a.data[i++];
   while(j<=b.length)
     c->data[k++]=b.data[j++];
   c->length=k-1;
}
void printf_seqlist(seqlist *L)/*输出*/
{
    int i=0;
    for(i=0;i<L->length+2;i++)
    printf("%d\n",L->data[i]);
}
void tjia(seqlist *L,int n)/*在表内添加元素*/
{ int i=0,k=0;
  for(i=0;i<n;i++)
  { scanf("%d",&k);
      L->data[i]=k;
  }
  L->length=n-2;
   
}
void cr(seqlist*L) /*插入2*/
{   int i=0,d=0;
    printf ("输入位置和数值:\n");
    scanf("%d%d",&i,&d);
    if(inset(L,i,d))
     {
         printf("插入成功\n");
         printf_seqlist(L);
     }   
        
}
void sc(seqlist*L)/*删除2*/
{   int i=0;
    printf ("输入位置\n");
    scanf("%d",&i);
    if(delete_seqlist(L,i-1))
     {
         printf("删除成功\n");
         printf_seqlist(L);
     }        
}
main()
{   int na,nb,ic=0,i=0,d=0;
    na=3,nb=5;
    seqlist la,lb,lc;
    creat(&la);    creat(&lb);    creat(&lc);
    printf ("创建la表,输入表内元素:\n");
    tjia(&la,na);
    printf("输出la表:\n");
    printf_seqlist(&la);
   
    printf("是否在la中插入?(需要插入输入1,输入其他则不插入)\n");
    scanf("%d",&ic);
    if(ic==1)
    cr(&la);
   
    printf("是否删除la中的元素?(需要插入输入1,输入其他则不插入)\n");
    scanf("%d",&ic);
    if(ic==1)
     sc(&la);
         
    printf ("创建lb表,输入表内元素:\n");
    tjia(&lb,nb);
    printf("输出lb表:\n");
    printf_seqlist(&lb);
   
    printf("是否在lb中插入?(需要插入输入1,输入其他则不插入)\n");
    scanf("%d",&ic);
    if(ic==1)
    cr(&lb);
   
    printf("是否删除lb中的元素?(需要插入输入1,输入其他则不插入)\n");
    scanf("%d",&ic);
    if(ic==1)
    sc(&lb);
   
    hebing(la,lb,&lc);
    printf("输出lc表:\n");
    printf_seqlist(&lc);

   
}
搜索更多相关主题的帖子: int data length 插入 printf 
2017-10-17 21:54
w1031271617
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2017-10-17
收藏
得分:0 
这是有关顺序表的插入删除和合并,但是我的合并出了问题,就是两个表合并每个表最后一个元素都不见了。我这是照这书上代码打的,感觉不出有什么问题
2017-10-17 21:55
LG隐
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:67
专家分:198
注 册:2016-4-20
收藏
得分:20 
void hebing(seqlist a, seqlist b, seqlist *c)/*合并*/
{
    int i = 0, j = 0, k = 0;
    while (i <= a.length+1&&j <= b.length+1)
    if (a.data[i]<b.data[j])
        c->data[k++] = a.data[i++];
    else
        c->data[k++] = b.data[j++];
    while (i <= a.length+1)
        c->data[k++] = a.data[i++];
    while (j <= b.length+1)
        c->data[k++] = b.data[j++];
    c->length = k - 2;
}
就是长度的问题,我没看直接在你合并的函数中给a.length+1,b.length+1;然后就都输出了,我发现又多了一个地址;我寻思是合并的多余了,然后c->length=k-2;然后就行了
我也不知道原因,你自己看吧,,我也是新手
收到的鲜花
  • w10312716172017-10-18 12:43 送鲜花  2朵   附言:我很赞同
2017-10-17 23:45
w1031271617
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2017-10-17
收藏
得分:0 
回复 3楼 LG隐
谢谢
2017-10-18 12:46
快速回复:求大佬指出问题,困扰了几天了..
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030789 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved