为了账号安全,请及时绑定邮箱和手机立即绑定

顺序表中插入元素不成功怎么回事,代码没有错误

#include<stdlib.h>
#include"List.h"
#include<iostream>
using namespace std;
int  main(void)
{
	List *list=new List(10);
	int e1=5;
	int e2=6;
	list->ListInsert(0,&e1);
	list->ListInsert(1,&e2);
	list->ListTraverse();

    system("pause");
	return 0;
}
#include"List.h"
#include<iostream>
using namespace std;

List::List(int size)
{
	m_iSize=size;
	m_pList=new int[m_iSize];
	m_iLength=0;
}
List::~List()
{
	delete []m_pList;
	m_pList=NULL;
}
void List::ClearList()
{
	m_iLength=0;
}
bool List::ListEmpty()
{
	return m_iLength==0?true:false;
}
int List::ListLength()
{
	return m_iLength;
}
bool List::GetElem(int i,int *e)
{
	if(i<0||i>=m_iSize)
	{
		return false;
	}
	else
	{
		*e=m_pList[i];
		return true;
	}
	
}
int List::LocateElem(int *e)
{
	for(int i=0;i<m_iLength;i++)
	{
		if(m_pList[i]==*e)
		{
			return i;
		}
	}
	return -1;
}
bool List::PriorElem(int *currentElem,int *preElem)
{

	int temp=LocateElem(currentElem);
	if(temp==-1)
	{
		return false;
	}
	else
	{
		if(temp==0)
		{
			return false;
		}
		else
		{
			*preElem=m_pList[temp-1];
			return true;
		}
	}
}

bool List::NextElem(int *currentElem,int *nextElem)
{
	int temp=LocateElem(currentElem);
	if(temp==-1)
	{
		return false;
	}
	else
	{
		if(temp==m_iLength-1)
		{
			return false;
		}
		else
		{
			*nextElem=m_pList[temp+1];
			return true;
		}
	}
}
void List::ListTraverse()
{
	for(int i=0;i<m_iLength;i++)
	{
		cout << m_pList[i]<<endl;
	}
}
bool List::ListInsert(int i,int *e)
{
	if(i<0||i>=m_iLength)
	{
		return false;
	}
	else
	{
		for(int k=m_iLength-1;k>=i;k--)
		{
		m_pList[k+1]=m_pList[k];
		}
		m_pList[i]=*e;
		m_iLength++;
		return true;
	}
	
}
bool List::ListDelete(int i,int *e)
{
	if(i<0||i>m_iLength)
	{
		return false;
	}
	else
	{
		*e=m_pList[i];
		for(int j=i+1;j<m_iLength;j++)
		{
		m_pList[j-1]=m_pList[j];
		}
		m_iLength--;
		return true;
	}
	
	
}

#ifndef LIST_H
#define LIST_H

class List
{
public:
	List(int size);
	~List();
	void ClearList();
	bool ListEmpty();
	int ListLength();
	bool GetElem(int i,int *e);
	int LocateElem(int *e);
	bool PriorElem(int *currentElem,int *preElem);
	bool NextElem(int *currentElem,int *nextElem);
	void ListTraverse();
	bool ListInsert(int i,int *e);
	bool ListDelete(int i,int *e);
private:
	int *m_pList;
	int m_iSize;
	int m_iLength;

};



#endif


正在回答

1 回答

ListInsert这个方法中if(i<0||i>=m_iLength) { return false;} 这个判断错了。

一开始m_iLength=0; 你执行 list->ListInsert(0,&e1);时,传入i=0 就return false;了,当然也就没法正确插入元素。

要理解m_iLength这个变量其实总是指向于数组最后一个元素的下一个元素。插入时是允许插入在该位置上的。删除时才不能删除该位置的元素。


应该改成if(i<0 || i > m_iLength) {return false;}

顺便一说,ListDelete这个方法相应的地方也是错的。

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
数据结构探险之线性表篇
  • 参与学习       57540    人
  • 解答问题       257    个

线性表的主体顺序表和链表,让学员能够将知识融会贯通学以致用

进入课程

顺序表中插入元素不成功怎么回事,代码没有错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信