| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1333 人关注过本帖
标题:初学者, 小女子被书上一算法难住了
只看楼主 加入收藏
cherish——
Rank: 1
等 级:新手上路
帖 子:25
专家分:1
注 册:2012-8-18
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:14 
初学者, 小女子被书上一算法难住了
算法弄成c之后还是报错    但是找不出错误的说
#include<stdio.h>
#include<malloc.h>
typedef struct{
int *al;
int l;
int ls;
}sq;

int init(sq&L)
{
 L.al=(int*)malloc(100*sizeof(int));
 if(!L.al)printf("0");

  L.l=0;
  L.ls=100;
  return 1;
  }


int hb(sq La,sq Lb, sq &Lc)
   {int pa,pb,pc,m,n;
   int i;
   pa=La.al;
   pb=Lb.al;
 Lc.ls=Lc.l=La.l+Lb.l;
pc=Lc.al=(int*)malloc(Lc.ls*sizeof(int));
if(!Lc.al)printf("0");
m=La.al+La.l-1;
n=Lb.al+Lb.l-1;
while(pa<=m&&pb<=n)
{if(*pa<=*pb)*pc++=*pa++;
else *pc++=*pb++;}
while(pa<=m) *(pc++)=*(pa++);
while(pb<=n) *(pc++)=*(pb++);
}



   main()
   {sq La,Lb,Lc;int i;
  init(La);
  init(Lb);
   printf("请输入La表元素的个数\n");
   scanf("%d",&La.l);
for(i=0;i<La.l;i++)
   scanf("%d",&La.al[i]);
   
   printf("输入Lb表元素个数\n");
   scanf("%d",&Lb.l);
   for(i=0;i<Lb.l;i++)
       scanf("%d",&Lb.al[i]);

   printf("La的元素为:\n");
   for(i=0;i<La.l;i++)
       printf("%d  ",La.al[i]);

   printf("\nLb的元素为:\n");
   for(i=0;i<Lb.l;i++)
       printf("%d  ",Lb.al[i]);
   hb(La,Lb,Lc);
       for(i=0;i<Lc.l;i++)
           printf("%d",Lc.al[i]);

   }
   
   
   
搜索更多相关主题的帖子: include 小女子 return 
2013-03-21 20:41
cherish——
Rank: 1
等 级:新手上路
帖 子:25
专家分:1
注 册:2012-8-18
收藏
得分:0 
  还有一个的说   。。。
#include<stdio.h>
#include<malloc.h>
typedef struct Lnode{
int date;
struct Lnode *next;

}Lnode,*Lk;

int init(Lk&L,int i)
{int j,m,e;
Lk p,q;


L=(Lk)malloc(sizeof(Lk));
L->next=0;
q=L;
for(j=0;j<i;j++)
{p=(Lk)malloc(sizeof(Lk));
scanf("%d",&p->date);
p->next=0;
q->next=p;
q=p;
}

return 1;
}

int cz(Lk&L,int m,int &e)
  {int j=1;
  Lk p;
      
      p=L->next;
      if(p&&j<m){p=p->next;j++;}
  if(!p||j>m)printf("0");
       e=p->date;
  return 1;

                                         
  
  
  }

 main()
 {Lk L,p;
 int i,n,m,e;
 printf("输入链表元素个数:");
 scanf("%d",&n);
 init(L,n);
p=L->next;
 printf("创建的链表为:");
 for(i=0;i<n;i++)
 {     printf("%d  ",p->date);
 p=p->next;}  
 printf("\n输入要查找的位置:");
 scanf("%d",&m);
 cz(L,m,e);
 printf("元素是%d",e);

 }
2013-03-21 20:42
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:0 
美女,结构体struct后代带不带结构体名的区别知道不,&符号别乱用,可以说它和指针常在一起用,也可以说结构体中常中。c的精华我认为好像是结构体。有空好好研究下,肯定对你的学习有帮忙的。第二个算法输出一看用的for循环输出就觉的你没理解链表。L—next=0,看来指针的知识很有必要再学习下。祝楼主早日渡过这个烦人的阶段,学习进步啦。给你你提个建议,只要涉及到表操作,啥都先别管,一个输入输出写对了再干别的。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-03-22 06:24
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:10 
#include<stdio.h>
#include<malloc.h>
typedef struct Lnode{
int date;
struct Lnode *next;

}Lnode,*Lk;

void init(Lk&L,int i)//建立链表头插法,还有好几种好好学习下,要的话我可以给你
{int j;
Lk p,q;
L=(Lk)malloc(sizeof(Lk));
L->next=NULL;
q=L;
printf("输入链表的元素:");//加个提示
for(j=0;j<i;j++)
{p=(Lk)malloc(sizeof(Lk));
scanf("%d",&p->date);
q->next=p;
q=p;
}
q->next=NULL;
}

Lk cz(Lk&L,int m,int &e)
  {int j=1;
  Lk p;
      
      p=L->next;
      /*if(p&&j<m){p=p->next;j++;}//循环都没有你让它怎么后移
  if(p==NULL||j>m) printf("0");
     else  e=p->date;*/
      while(p!=NULL&&j<m)
      {p=p->next;
        j++;
      }
  return p;

                                         
  
  
  }

int main()
{Lk L,p;
int n,m,e;
printf("输入链表元素个数:");
scanf("%d",&n);
init(L,n);
p=L->next;
printf("创建的链表为:");
while(p!=NULL)//既然用了链表建议不要用for循环
{     printf("%d  ",p->date);
p=p->next;}  
printf("\n输入要查找的位置:");
scanf("%d",&m);
//cz(L,m,e);
printf("元素是%d",cz(L,m,e)->date);
return 0;
}//搞得了,楼主参考,改了你的别介意啊

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-03-22 14:02
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:8 
#include <iostream>
#include <iomanip>
using namespace std;
#define Max 100
typedef struct A
{    int *s;
    int MAXLenth;
    int Lenth;
}A;
void Create(A *L,int n)
{  L->MAXLenth=Max;
    cout<<"顺序表的长度n:"<<endl;
    cin>>n;
    L->Lenth=n;
    L->s=new int [n];
cout<<"顺序表的元素:"<<endl;
    for(int i=1;i<=L->Lenth;i++)
    {
         cin>>L->s[i];
    }
     
}
void Insert(A *L,int i,int e)
{    cout<<"请输入插入位置和元素:"<<endl;
    cin>>i>>e;
    if((L->Lenth<L->MAXLenth)&&(i>=1)&&(i<=L->Lenth))
    {    for(int j=L->Lenth+1;j>i;j--)
            L->s[j]=L->s[j-1];
        L->s[i]=e;
        L->Lenth++;
    }
    else cout<<"插入位置不正确"<<endl;
}
void Delete(A *L,int t)//删除表t位置的元素
{        cout<<"删除元素的位置:"<<endl;
    cin>>t;
    if(t<0||t>L->Lenth||t>L->MAXLenth)
  cout<<"没有这个位置"<<endl;
    else
    {for(int j=t+1;j<=L->Lenth;j++)
        L->s[j-1]=L->s[j];
        L->Lenth--;
    }
}
void Delete1(A *L,int s,int t)
{ cout<<"输入删除s到t之间的所有元素的位置s和t:"<<endl;
     cin>>s>>t;
    int c;
    c=t-s+1;
    for(int j=s+c;j<=L->Lenth;j++)
        L->s[j-c]=L->s[j];
        L->Lenth=L->Lenth-c;
   
}
int  Length(A *L)
{return (L->Lenth);
}
void Display(A *L)
{    cout<<"顺序表为:"<<endl;
      for( int i=1;i<=L->Lenth;i++)
          cout<<L->s[i]<<setw(4);
      cout<<endl;
}

void Frame()
{cout<<setw(10)<<"///////////////////////////////////////////////////////"<<endl;
cout<<setw(10)<<"***********顺序表的相关操作*****************************"<<endl;
cout<<setw(10)<<"************请输入你的选择:****************************"<<endl;
cout<<setw(10)<<"************1.建立顺序表:*******************************"<<endl;
cout<<setw(10)<<"************2.在顺序表中删除s到t的元素:*****************"<<endl;
cout<<setw(10)<<"************3.在顺序表中删除元素位置:*******************"<<endl;
cout<<setw(10)<<"************4.输出顺序表:*******************************"<<endl;
cout<<setw(10)<<"************5.在顺序表中插入元素:*******************************"<<endl;
cout<<setw(10)<<"************6.顺序表中的长度:*******************************"<<endl;
cout<<setw(10)<<"************0.退出系统:*********************************"<<endl;
}
int main()
{    A L;
    int t,n,s,c=0,a,b;

/*cout<<"顺序表的长度n:"<<endl;
    cin>>n;
cout<<"顺序表的元素:"<<endl;
    Create(&L,n);
    cout<<"输入删除s到t之间的所有元素的位置s和t:"<<endl;
     cin>>s>>t;
    Delete1(&L,s,t);
    Display(&L);*/
do
    {Frame();
        cin>>c;
        switch(c)
        {case 1: Create(&L,n);break;
        case 2: Delete1(&L,s,t);break;
        case 3:    Delete(&L,t);break;
        case 4:   Display(&L);break;
        case 5:   Insert(&L,a,b);break;
        case 6:   cout<<"顺序表的长度:"<<Length(&L)<<endl;break;
    //    default: cout<<"错误":<<endl;break;
        }
    }while(c!=0);
   
   
    return 0;
}//这个借你研究下,有问题别介意,看明白了,顺序表也就差不多了吧。你那个我给你改了有点怕你发火

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-03-22 14:08
cherish——
Rank: 1
等 级:新手上路
帖 子:25
专家分:1
注 册:2012-8-18
收藏
得分:0 
回复 5楼 不玩虚的
大仙好牛叉   我自己都看不下去了  。。。。

          唉唉  不过这个学期才开的数据结构    程序太多   有点眼晕


  谢谢大仙了~~~
2013-03-22 16:57
cherish——
Rank: 1
等 级:新手上路
帖 子:25
专家分:1
注 册:2012-8-18
收藏
得分:0 
回复 2楼 cherish——
这里是说我 int&e用错了是么??

  主要是我的数据结构老师说  有值的变化的前面都要用&  不一定是要用指针才可以~~~


而且我刚才也试用了一下  我那程序只要把 if  改成while 就可以运行了嗯~~

 现在又有个问题就是我如果要查找的数大于输进去的数字    会出现一个应用程序错误的小方框  

  求解释 呢    大仙~~
2013-03-22 17:54
cherish——
Rank: 1
等 级:新手上路
帖 子:25
专家分:1
注 册:2012-8-18
收藏
得分:0 
回复 4楼 不玩虚的
    话说只是吗??

 真心有点看不懂  语法。。。。

 菜鸟小妞飞过~~~
2013-03-22 17:56
cherish——
Rank: 1
等 级:新手上路
帖 子:25
专家分:1
注 册:2012-8-18
收藏
得分:0 
回复 4楼 不玩虚的
请教大仙  为什么用了链表就不能用for呢??


   主要是用习惯了for 一下用while 会反应不过来
2013-03-22 18:20
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:2 
你才开数据结构,我是重修啊。多多关照啊,那些有空慢慢给你讲吧,不过这月没有网了,悲剧啊

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-03-22 22:41
快速回复:初学者, 小女子被书上一算法难住了
数据加载中...
 
   



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

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