关于C++单链表插入和删除。。不造为什么编译影片时出错过了然而运行出错,求大神援手!

&&/&&&&/&&&&/&&
数组在内存中是顺序存储的,要在数组中插入一个数据就变得颇为麻烦。这就像是在一排麻将中插入一个牌,必须把后面的牌全部依次顺移。然而,链表中各结点的关系是由指针决定的,所以在链表中插入结点要显得方便一些。这就像是把一条链子先一分为二,然后用一个环节再把它们连接起来。如下图9.6.2所示。
下面我们先对插入结点这个功能具体分析一下:
我们必须知道对哪个链表进行操作,所以表头指针head是必须知道的。
为了确定插入位置,插入位置前的结点指针pGuard是必须是知道的。
用一个newnode指针来接受新建的结点。
如果要插入的位置是表头,由于操作的是表头指针而不是一个结点,所以要特殊处理。
在插入结点的过程中,始终要保持所有的结点都在我们的控制范围内,保证链表的完整性。为了达到这一点,我们采用先连后断的方式:先把新结点和它的后继结点连接,再把插入位置之前的结点与后继结点断开,并与新结点连接。如下图9.6.3所示。
做完了分析,我们可以开始编写插入函数了。为了简单起见,我们规定新结点插入位置为数据是关键字的结点之后,这样就可以使用刚才编写好的search函数了。如果该结点不存在,则插入在表头。则插入函数如下:(程序9.6.3)
void insert(node * &head,char keyWord,char newdata)//keyWord是查找关键字符
& &node *newnode=//新建结点
& &newnode-&data=//newdata是新结点的数据
& &node *pGuard=search(head,keyWord);//pGuard是插入位置前的结点指针
& &if (head==NULL || pGuard==NULL)//如果链表没有结点或找不到关键字结点
& &{//则插入表头位置
& & & newnode-&next=//先连
& & &head=//后断
& &else//否则
& &{//插入在pGuard之后
& & & newnode-&next=pGuard-&//先连
& & & pGuard-&next=//后断
与插入数据类似,数组为了保持其顺序存储的特性,在删除某个数据时,其后的数据都要依次前移。而链表中结点的删除仍然只要对结点周围小范围的操作就可以了,不必去修改其他的结点。
仍然我们先要来具体分析删除结点这个功能:
我们必须知道对哪个链表进行操作,所以表头指针head是必须知道的。
一般来说,待删除的结点是由结点的数据确定的。然而我们还要操作待删除结点之前的结点(或指针),以连接前后两段链表。之前所写的search函数只能找到待删除的结点,却无法找到这个结点的前趋结点。所以,我们只好放弃search函数,另起炉灶。
令pGuard指针为待删除结点的前趋结点指针。
由于要对待删除结点作内存释放,需要有一个指针p指向待删除结点。
如果待删除结点为头结点,则我们要操作表头head,作为特殊情况处理。
在删除结点的过程中,仍然要始终保持所有的结点都在我们的控制范围内,保证链表的完整性。为了达到这一点,我们还是采用先连后断的方式:先把待删除结点的前趋结点和它的后继结点连接,再把待删除结点与它的后继结点断开,并释放其空间。如下图9.6.4所示。
如果链表没有结点或找不到待删除结点,则给出提示信息。
由于delete是C++中的保留字,我们无法用它作为函数名,所以只好用Delete代替(C++是大小写敏感的,Delete和delete是不同的)。都准备好了,我们就可以开始写函数了:(程序9.6.4)
void Delete(node * &head,char keyWord)//可能要操作表头指针,所以head是引用
& &if (head!=NULL)//如果链表没有结点,就直接输出提示
& & & node *p;
& & & node *pGuard=//初始化pGuard指针
& & & if (head-&data==keyWord)//如果头结点数据符合关键字
& & & & &p=//头结点是待删除结点
& & & & head=head-&//先连
& & & & &//后断
& & & & &cout &&&The deleted node is & &&keyWord &&
& & & & &//结束函数运行
& & & else//否则
& & & & &while (pGuard-&next!=NULL)//当pGuard没有达到表尾
& & & & &{
& & & & & & if (pGuard-&next-&data==keyWord)//如果pGuard后继结点数据符合关键字
& & & & & & {
& & & & & & & &p=pGuard-&//pGuard后继结点是待删除结点&
& & & & & & & &pGuard-&next=p-&//先连
& & & & & & & &//后断
& & & & & & & &cout &&&The deleted node is & &&keyWord &&
& & & & & & & &//结束函数运行
& & & & & & }
& & & & & & pGuard=pGuard-&//pGuard指针向后移动
& & & & & }
& &cout &&&The keyword node is not found or the link list is empty!& &&//输出提示信息
推荐文章 TOP10小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
C++调用NIST物性程序出错,求大神分析分析!谢谢
这是NIST9.0里面Examples文件夹里面自带的c++调用物性的例子,但是编译之后就出错。。。小弟不才,求大神分析分析,什么原因??谢谢!!
// Example C program written by:
// Chris Muzny
// N.I.S.T.
// Chemical Science and Technology Laboratory
// Physical and Chemical Properties of Fluids Division
// (303) 497-5549
//This program demonstrates explicitly linking the subroutines available in
// refprop.dll.&&In order to link this code refprop1.h
// must be available in the current directory.&&When executing refprop.dll must be in the dll
// search path (current directory and $PATH).
#include &windows.h&
#include &stdio.h&
#include &refprop1.h&
// Some constants...
const long refpropcharlength=255;
const long filepathlength=255;
const long lengthofreference=3;
const long errormessagelength=255;
const long ncmax=20;& & & &&&// Note: ncmax is the max number of components
const long numparams=72;
const long maxcoefs=50;
int main(int argc, char* argv)
// First create a pointer to an instance of the library
// Then have windows load the library.
& &HINSTANCE RefpropdllI
//This looks only in the current directory for refprop.dll
& &RefpropdllInstance = LoadLibrary(&./refprop.dll&);
// Then get pointers into the dll to the actual functions.
ABFL1dll = (fp_ABFL1dllTYPE) GetProcAddress(RefpropdllInstance,&ABFL1dll&);
ABFL2dll = (fp_ABFL2dllTYPE) GetProcAddress(RefpropdllInstance,&ABFL2dll&);
ACTVYdll = (fp_ACTVYdllTYPE) GetProcAddress(RefpropdllInstance,&ACTVYdll&);
AGdll = (fp_AGdllTYPE) GetProcAddress(RefpropdllInstance,&AGdll&);
CCRITdll = (fp_CCRITdllTYPE) GetProcAddress(RefpropdllInstance,&CCRITdll&);
CP0dll = (fp_CP0dllTYPE) GetProcAddress(RefpropdllInstance,&CP0dll&);
CRITPdll = (fp_CRITPdllTYPE) GetProcAddress(RefpropdllInstance,&CRITPdll&);
CSATKdll = (fp_CSATKdllTYPE) GetProcAddress(RefpropdllInstance,&CSATKdll&);
CV2PKdll = (fp_CV2PKdllTYPE) GetProcAddress(RefpropdllInstance,&CV2PKdll&);
CVCPKdll = (fp_CVCPKdllTYPE) GetProcAddress(RefpropdllInstance,&CVCPKdll&);
CVCPdll = (fp_CVCPdllTYPE) GetProcAddress(RefpropdllInstance,&CVCPdll&);
DBDTdll = (fp_DBDTdllTYPE) GetProcAddress(RefpropdllInstance,&DBDTdll&);
DBFL1dll = (fp_DBFL1dllTYPE) GetProcAddress(RefpropdllInstance,&DBFL1dll&);
DBFL2dll = (fp_DBFL2dllTYPE) GetProcAddress(RefpropdllInstance,&DBFL2dll&);
DDDPdll = (fp_DDDPdllTYPE) GetProcAddress(RefpropdllInstance,&DDDPdll&);
DDDTdll = (fp_DDDTdllTYPE) GetProcAddress(RefpropdllInstance,&DDDTdll&);
DEFLSHdll = (fp_DEFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&DEFLSHdll&);
DHD1dll = (fp_DHD1dllTYPE) GetProcAddress(RefpropdllInstance,&DHD1dll&);
DHFLSHdll = (fp_DHFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&DHFLSHdll&);
DIELECdll = (fp_DIELECdllTYPE) GetProcAddress(RefpropdllInstance,&DIELECdll&);
DOTFILLdll = (fp_DOTFILLdllTYPE) GetProcAddress(RefpropdllInstance,&DOTFILLdll&);
DPDD2dll = (fp_DPDD2dllTYPE) GetProcAddress(RefpropdllInstance,&DPDD2dll&);
DPDDKdll = (fp_DPDDKdllTYPE) GetProcAddress(RefpropdllInstance,&DPDDKdll&);
DPDDdll = (fp_DPDDdllTYPE) GetProcAddress(RefpropdllInstance,&DPDDdll&);
DPDTKdll = (fp_DPDTKdllTYPE) GetProcAddress(RefpropdllInstance,&DPDTKdll&);
DPDTdll = (fp_DPDTdllTYPE) GetProcAddress(RefpropdllInstance,&DPDTdll&);
DPTSATKdll = (fp_DPTSATKdllTYPE) GetProcAddress(RefpropdllInstance,&DPTSATKdll&);
DSFLSHdll = (fp_DSFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&DSFLSHdll&);
ENTHALdll = (fp_ENTHALdllTYPE) GetProcAddress(RefpropdllInstance,&ENTHALdll&);
ENTROdll = (fp_ENTROdllTYPE) GetProcAddress(RefpropdllInstance,&ENTROdll&);
ESFLSHdll = (fp_ESFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&ESFLSHdll&);
FGCTYdll = (fp_FGCTYdllTYPE) GetProcAddress(RefpropdllInstance,&FGCTYdll&);
FPVdll = (fp_FPVdllTYPE) GetProcAddress(RefpropdllInstance,&FPVdll&);
GERG04dll = (fp_GERG04dllTYPE) GetProcAddress(RefpropdllInstance,&GERG04dll&);
GETFIJdll = (fp_GETFIJdllTYPE) GetProcAddress(RefpropdllInstance,&GETFIJdll&);
GETKTVdll = (fp_GETKTVdllTYPE) GetProcAddress(RefpropdllInstance,&GETKTVdll&);
GIBBSdll = (fp_GIBBSdllTYPE) GetProcAddress(RefpropdllInstance,&GIBBSdll&);
HSFLSHdll = (fp_HSFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&HSFLSHdll&);
INFOdll = (fp_INFOdllTYPE) GetProcAddress(RefpropdllInstance,&INFOdll&);
LIMITKdll = (fp_LIMITKdllTYPE) GetProcAddress(RefpropdllInstance,&LIMITKdll&);
LIMITSdll = (fp_LIMITSdllTYPE) GetProcAddress(RefpropdllInstance,&LIMITSdll&);
LIMITXdll = (fp_LIMITXdllTYPE) GetProcAddress(RefpropdllInstance,&LIMITXdll&);
MELTPdll = (fp_MELTPdllTYPE) GetProcAddress(RefpropdllInstance,&MELTPdll&);
MELTTdll = (fp_MELTTdllTYPE) GetProcAddress(RefpropdllInstance,&MELTTdll&);
MLTH2Odll = (fp_MLTH2OdllTYPE) GetProcAddress(RefpropdllInstance,&MLTH2Odll&);
NAMEdll = (fp_NAMEdllTYPE) GetProcAddress(RefpropdllInstance,&NAMEdll&);
PDFL1dll = (fp_PDFL1dllTYPE) GetProcAddress(RefpropdllInstance,&PDFL1dll&);
PDFLSHdll = (fp_PDFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&PDFLSHdll&);
PEFLSHdll = (fp_PEFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&PEFLSHdll&);
PHFL1dll = (fp_PHFL1dllTYPE) GetProcAddress(RefpropdllInstance,&PHFL1dll&);
PHFLSHdll = (fp_PHFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&PHFLSHdll&);
PQFLSHdll = (fp_PQFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&PQFLSHdll&);
PREOSdll = (fp_PREOSdllTYPE) GetProcAddress(RefpropdllInstance,&PREOSdll&);
PRESSdll = (fp_PRESSdllTYPE) GetProcAddress(RefpropdllInstance,&PRESSdll&);
PSFL1dll = (fp_PSFL1dllTYPE) GetProcAddress(RefpropdllInstance,&PSFL1dll&);
PSFLSHdll = (fp_PSFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&PSFLSHdll&);
PUREFLDdll = (fp_PUREFLDdllTYPE) GetProcAddress(RefpropdllInstance,&PUREFLDdll&);
QMASSdll = (fp_QMASSdllTYPE) GetProcAddress(RefpropdllInstance,&QMASSdll&);
QMOLEdll = (fp_QMOLEdllTYPE) GetProcAddress(RefpropdllInstance,&QMOLEdll&);
SATDdll = (fp_SATDdllTYPE) GetProcAddress(RefpropdllInstance,&SATDdll&);
SATEdll = (fp_SATEdllTYPE) GetProcAddress(RefpropdllInstance,&SATEdll&);
SATHdll = (fp_SATHdllTYPE) GetProcAddress(RefpropdllInstance,&SATHdll&);
SATPdll = (fp_SATPdllTYPE) GetProcAddress(RefpropdllInstance,&SATPdll&);
SATSdll = (fp_SATSdllTYPE) GetProcAddress(RefpropdllInstance,&SATSdll&);
SATTdll = (fp_SATTdllTYPE) GetProcAddress(RefpropdllInstance,&SATTdll&);
SETAGAdll = (fp_SETAGAdllTYPE) GetProcAddress(RefpropdllInstance,&SETAGAdll&);
SETKTVdll = (fp_SETKTVdllTYPE) GetProcAddress(RefpropdllInstance,&SETKTVdll&);
SETMIXdll = (fp_SETMIXdllTYPE) GetProcAddress(RefpropdllInstance,&SETMIXdll&);
SETMODdll = (fp_SETMODdllTYPE) GetProcAddress(RefpropdllInstance,&SETMODdll&);
SETREFdll = (fp_SETREFdllTYPE) GetProcAddress(RefpropdllInstance,&SETREFdll&);
SETUPdll = (fp_SETUPdllTYPE) GetProcAddress(RefpropdllInstance,&SETUPdll&);
SPECGRdll = (fp_SPECGRdllTYPE) GetProcAddress(RefpropdllInstance,&SPECGRdll&);
SUBLPdll = (fp_SUBLPdllTYPE) GetProcAddress(RefpropdllInstance,&SUBLPdll&);
SUBLTdll = (fp_SUBLTdllTYPE) GetProcAddress(RefpropdllInstance,&SUBLTdll&);
SURFTdll = (fp_SURFTdllTYPE) GetProcAddress(RefpropdllInstance,&SURFTdll&);
SURTENdll = (fp_SURTENdllTYPE) GetProcAddress(RefpropdllInstance,&SURTENdll&);
TDFLSHdll = (fp_TDFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&TDFLSHdll&);
TEFLSHdll = (fp_TEFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&TEFLSHdll&);
THERM0dll = (fp_THERM0dllTYPE) GetProcAddress(RefpropdllInstance,&THERM0dll&);
THERM2dll = (fp_THERM2dllTYPE) GetProcAddress(RefpropdllInstance,&THERM2dll&);
THERM3dll = (fp_THERM3dllTYPE) GetProcAddress(RefpropdllInstance,&THERM3dll&);
THERMdll = (fp_THERMdllTYPE) GetProcAddress(RefpropdllInstance,&THERMdll&);
THFLSHdll = (fp_THFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&THFLSHdll&);
TPFLSHdll = (fp_TPFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&TPFLSHdll&);
TPRHOdll = (fp_TPRHOdllTYPE) GetProcAddress(RefpropdllInstance,&TPRHOdll&);
TQFLSHdll = (fp_TQFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&TQFLSHdll&);
TRNPRPdll = (fp_TRNPRPdllTYPE) GetProcAddress(RefpropdllInstance,&TRNPRPdll&);
TSFLSHdll = (fp_TSFLSHdllTYPE) GetProcAddress(RefpropdllInstance,&TSFLSHdll&);
VIRBdll = (fp_VIRBdllTYPE) GetProcAddress(RefpropdllInstance,&VIRBdll&);
VIRCdll = (fp_VIRCdllTYPE) GetProcAddress(RefpropdllInstance,&VIRCdll&);
WMOLdll = (fp_WMOLdllTYPE) GetProcAddress(RefpropdllInstance,&WMOLdll&);
XMASSdll = (fp_XMASSdllTYPE) GetProcAddress(RefpropdllInstance,&XMASSdll&);
XMOLEdll = (fp_XMOLEdllTYPE) GetProcAddress(RefpropdllInstance,&XMOLEdll&);
// Now use the functions.
// Refprop variables that need to be defined
// nc = Number of components in the mixture
// x = Mole fraction of each component
// ierr =&&An integer flag defining an error
// hf = a character array defining the fluids in a mixture
// hrf = a character array denoting the reference state
// herr = a character array for storing a string - Error message
// hfmix a character array defining the path to the mixture file
double x,xliq,xvap,f;
& && &long i,
& &&&char hf, hrf,
& && &herr,
//Exlicitely set the fluid file PATH
char *FLD_PATH;&&
FLD_PATH = &C:\\Program Files\\REFPROP\\fluids\\&;
strcpy(hf,FLD_PATH);
strcpy(hfmix,FLD_PATH);
//...initialize the program and set the pure fluid component name
& && &i=1;
& && &strcpy(hf,&nitrogen.fld&);
& && &strcpy(hfmix,&hmx.bnc&);
& &&&strcpy(hrf,&DEF&);
& & strcpy(herr,&Ok&);
//...Call SETUP to initialize the program
SETUPdll(i, hf, hfmix, hrf, ierr, herr,
refpropcharlength*ncmax,refpropcharlength,
lengthofreference,errormessagelength);
if (ierr != 0) printf(&%s\n&,herr);
double wm,ttp,tnbp,tc,pc,dc,zc,acf,dip,
long info_index=1;
INFOdll(info_index,wm,ttp,tnbp,tc,pc,dc,zc,acf,dip,rgas);
printf(&WM,ACF,DIP,TTP,TNBP& &%10.4f,%10.4f,%10.4f,%10.4f,%10.4f\n&,wm,acf,dip,ttp,tnbp);
printf(&TC,PC,DC,RGAS& && && &%10.4f,%10.4f,%10.4f,%10.4f,%10.4f\n&,tc,pc,dc,rgas);
p=20000.0;
TPFLSHdll(t,p,x,d,dl,dv,xliq,xvap,q,e,h,s,cv,cp,w,ierr,herr,errormessagelength);
printf(&T,P,D,H,CP& && && && &%10.4f,%10.4f,%10.4f,%10.4f,%10.4f\n&,t,p,d,h,cp);
编译后出错:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\kernel32.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\KernelBase.dll', no matching symbolic information found.
First-chance exception in 111.exe: 0xC0000005: Access Violation.
弹出对话框:
Unhandled exception in&&111.exe: 0xc0000005:Access Violation.
求问大神,这是哪里有问题??这是软件自带的例子啊!!!谢谢了
用的VC++6.0& &win764位。。。但是我在xp系统下也试过了,错误提示一样的。。。很费解。。。编译的时候就通不过,但是是0error 0warning~~
你好,请问你遇到相同问题了吗?我的也是access violation.怎么破啊?求帮忙
研究生必备与500万研究生在线互动!
扫描下载送金币
浏览器进程
登录小木虫
打开微信扫一扫
随时随地聊科研关于c++链表插入问题??_百度知道C++单向链表的删除和插入_百度知道C++程序改错。关于链表的创建、节点插入、节点删除、显示链表等。大神帮忙!_百度知道

我要回帖

更多关于 pr cc编译影片时出错 的文章

 

随机推荐