| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 812 人关注过本帖
标题:[求助]个线形表合并算法在vc中的实现,已经基本编完,但是运行出错,找了半 ...
只看楼主 加入收藏
ascmvi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-6-1
收藏
 问题点数:0 回复次数:0 
[求助]个线形表合并算法在vc中的实现,已经基本编完,但是运行出错,找了半天找不出
aHfy62vI.rar (55.74 KB) [求助]个线形表合并算法在vc中的实现,已经基本编完,但是运行出错,找了半天找不出来,急!!!

程序文件我已经上传了,大家可以看看

先说明一下,我是初学者,所用的方法可能有点繁琐(老师就是这样说的),如果发现我哪里编错了,希望大家尽量讲的详细些,如果你觉得我用的方法不好,请说一下你自己的方法。谢谢!

程序有三个菜单:编辑顺序表la数据,编辑顺序表lb数据,合并并显示数据

首先我定义了两个全局变量CString str1;CString str2;在app类头文件中用extern进行了声明,在app类元文件中定义,在经过测试,这个没有问题

点击编辑顺序表la数据菜单,出现对话框,上面有一个编辑框,输入整形数据,以空格分隔数据,编辑完成后点击对话框上的输入按钮,将数据保存到str1中。

编辑顺序表lb数据菜单和第一个菜单类似。编辑完成后点击对话框上的输入按钮,将数据保存到str2中。

合并并显示数据我想用一个MessageBox显示

我在工程中自己添加了一个CSeqList类,用于对顺序表进行定义和操作,代码如下:

头文件:

// SeqList.h: interface for the CSeqList class. // //////////////////////////////////////////////////////////////////////

#if !defined(AFX_SEQLIST_H__01ABF61F_E2FC_4D92_B81D_0189D68CDF8B__INCLUDED_) #define AFX_SEQLIST_H__01ABF61F_E2FC_4D92_B81D_0189D68CDF8B__INCLUDED_

#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000

class CSeqList { public: CSeqList(int MaxSize=50);//构造函数 virtual ~CSeqList();//析构函数 int Length() const {return last+1;}//计算表长度 int Find (int &x) const;//定位函数:找x在表中位置 int IsIn(int &x);//判断x是否在表中 int Insert(int &x,int i);//插入x在表中第i个位置处 int Remove(int &x);//删除x int Next(int &x);//寻找x的后继 int Prior(int &x);//寻找x的前驱 int IsEmpty(){return last == -1;}//判断顺序表空否,空则返回1,否则返回0 int IsFull(){return last == MaxSize-1;}//判断顺序表否,满则返回1,否则返回0 int Get(int i){return i<0||i>last?NULL:data[i];}//取第i个元素的值

int *data;//顺序表的存放数组 int MaxSize;//顺序表的最大可容纳项数 int last;//顺序表当前以存放表项的最后位置 };

#endif // !defined(AFX_SEQLIST_H__01ABF61F_E2FC_4D92_B81D_0189D68CDF8B__INCLUDED_)

源文件:

// SeqList.cpp: implementation of the CSeqList class. // //////////////////////////////////////////////////////////////////////

#include "stdafx.h" #include "fff.h" #include "SeqList.h"

#ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif

////////////////////////////////////////////////////////////////////// // Construction/Destruction //////////////////////////////////////////////////////////////////////

CSeqList::CSeqList(int sz) { if(sz>0) {MaxSize = sz; last = -1; data=new int[MaxSize];

}

}

CSeqList::~CSeqList() {

} int CSeqList::Find(int &x) const {int i=0; while(i<=last&&data[i]!=x) i++; if(i>last)return -1; else return i; }

int CSeqList::IsIn(int &x) {int i=0,found=0; while(i<=last&&!found) if(data[i]!=x)i++; else found=1; return found; }

int CSeqList::Insert(int &x,int i) {if(i<=0||i>last+1||last==MaxSize-1)return 0; else {last++; for(int j=last;j>i;j--)data[j]=data[j-1]; data[i]=x; return 1; } }

int CSeqList::Remove(int &x) { int i=Find(x); if(i>=0) {last--; for(int j=i;j<=last;j++)data[j]=data[j+1]; return 1; } return 0; }

int CSeqList::Next(int &x) { int i=Find(x); if(i>=0&&i<last)return i+1; else return -1; }

int CSeqList::Prior(int &x) { int i=Find(x); if(i>0&&i<=last)return i-1; else return -1; }

然后在view类为第三个菜单即合并并显示数据添加命令相应函数

void CFffView::OnMenu3() { // TOD Add your command handler code here //下面为将CString对象转化为线形表的操作 int i;//循环变量 int a;//str1长度 int b;//str2长度 CString a1;//临时子串变量 CString a2;//临时子串变量 a=str1.GetLength( ); CSeqList seq1(a);

b=str2.GetLength( ); CSeqList seq2(b); int x=0;//线形表seq1的长度 int y=0;//线形表seq2的长度 int n=0;//用于存放起始位置 int t=0;//临时变量 ,用于存放str1转换后的int数据

for(i=0;i<a;i++) { if(str1[i]==32)//判断是否是空格 { a1=str1.Mid(n,i-n); n=i+1; t=atoi(LPCTSTR(a1)); //将CString转化为int类型 seq1.Insert(t,x++); } } if(str1[a-1]!=32) { a1=str1.Mid(n,a-1); t=atoi(LPCTSTR(a1)); seq1.Insert(t,x++); } int m=0;//用于存放起始位置 int s=0;//临时变量 ,用于存放str2转换后的int数据 for(i=0;i<b;i++) { if(str2[i]==32)//判断是否是空格 { a2=str2.Mid(m,i-m); m=i+1; s=atoi(LPCTSTR(a2)); //将CString转化为int类型 seq2.Insert(s,y++);

} } if(str2[a-1]!=32) { a2=str2.Mid(n,a-1); s=atoi(LPCTSTR(a2)); seq2.Insert(s,y++); }

//下面为线形表的合并 int len1=seq1.Length(); int len2=seq2.Length(); for(i=0;i<len2;i++) { int c=seq2.Get(i);//从seq2中取一元素 int k=seq1.Find(c);//从seq1中查找这一元素 if(k==-1) { seq1.Insert(c,len1+1);//未找到,插入到seq1的最后 len1++; }

}

//下面为合并后的线形表转换为CString类的对象,并用MessageBox显示 CString strz; for(i=0;i<seq1.MaxSize;i++) { CString strtemp; strtemp.Format("%d",seq1.Get(i)); strz=strz+strtemp;

} MessageBox(strz);

}

编译通过,但运行时出错,我觉得应该是void CFffView::OnMenu3() 这个函数里面出了问题。因为在这个函数没有的时候,程序一切正常,并且CSeqList类我是照着一本教材写的,而且也看了一下,应该没有错。

搜索更多相关主题的帖子: 算法 运行 
2005-06-05 00:34
快速回复:[求助]个线形表合并算法在vc中的实现,已经基本编完,但是运行出错,找 ...
数据加载中...
 
   



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

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