春风招生网小编给大家带来了数据结构中的顺序表插入操作中if(i<1 || i>L->len+1)中 L-什么意思?还是L->是一个整体呢?部分代码如下:相关文章,一起来看一下吧。
本文目录一览:

删除顺序表中的第i个元素,,给个完整的 C语言代码吧~~~ 谢谢
#include <
stdio.h
>
#define MAXSIZE 100
typedef struct{
int elem[MAXSIZE];
int last;
} SeqList;
void deletelist(SeqList *l,int i,int k);
int main(){
int i,k,j=0;
SeqList *l;
SeqList a;
l=&a;
scanf("%d%d",&i,&k);//输入i和k
while(scanf("%d",&l->elem[j])!=EOF)
j++;//输入顺序表内容
l->last=j-1;
deletelist(l,i,k);
return 0;
}
扩展资料
春风招生网
顺序表插入元素
向已有顺序表中插入数据元素,根据插入位置的不同,可分为以下 3 种情况:
1、插入到顺序表的
表头
;
2、在表的中间位置插入元素;
3、尾随顺序表中已有元素,作为顺序表中的最后一个元素;将要插入位置元素以及后续的元素整体向后移动一个位置;将元素放到腾出来的位置上。
注意,动态数组额外申请更多物理空间使用的是 realloc 函数。并且,在实现后续元素整体后移的过程,目标位置其实是有数据的,还是 3,只是下一步新插入元素时会把旧元素直接覆盖。

数据结构(C++版) 顺序表的保序插入操作,要求在下面的问题补充。急求源代码啊,用类定义的。
#include <iostream.h>
#include "Arithmetic.h"
#include <malloc.h>
/***********************************************************************
类名称 : CLineArray
功能 : 顺序存储下的线性表
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
class CLineArray
{
public:
CLineArray();
virtual ~CLineArray();
// 1.初使化线性表
bool Init(const int iSize = 10);
// 2.清空线性表
void Clear();
// 3.得到线性表的长度
int GetLenth()
{
return m_iSize;
}
// 4.检查线性表是否为空
bool IsEmpty()
{
return m_iSize == 0;
}
// 5.得到线性表中指定序号为pos的元素
bool GetElement(const int pos, Type& element);
// 6.遍历一个线性表
void Traverse();
// 7.查找指定元素出现的第一个位置
int FindElement(const Type& element);
// 8.更新线性表中的元素
bool Update(const Type& element, int iPos = 0);
// 9.向线性表中按指定条件插入一个元素
bool Insert(const Type& element, int iPos = -1);
// 10.从线性表中删除指定元素
bool Delete(Type& element, int iPos = -1);
// 11.对线性表排序
void Sort();
Type *m_pLineArray; // 存放线性表内容的指针
int m_iSize; // 线性表的实际长度
int m_iMaxSize; // 当前线性表的最大长度
bool m_bSort; // 为真时,是按顺序排列的,假时则没有排序
};
#include "LineArray.h"
template <class Type>
CLineArray<Type>::CLineArray():
m_pLineArray(NULL),
m_iSize(0),
m_iMaxSize(0)
{
}
template <class Type>
CLineArray<Type>::~CLineArray()
{
if (m_pLineArray != NULL)
{
delete []m_pLineArray;
m_pLineArray = NULL;
m_iMaxSize = 0;
m_iSize = 0;
}
}
/***********************************************************************
函数名 : Init
功能 : 初使化线性表
参数 : [IN] int iSize --- 线性表的最大长度,默认为10
返回值 : true初使化成功,false初使化失败
------------------------------------------------------------------------
备注 : 用户设置线性表的最大长度是为了加快添加数量大于线性表最大长度时重新分配空间时所占用的时间
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
bool CLineArray<Type>::Init(const int iSize)
{
// 如果用户第二次调用初使化则,查看以前是否分配过空间
// 如果分配过并且和这次分配的空间大小不一样则释放原来空间重新分配
if (m_pLineArray != NULL && m_iMaxSize != iSize)
{
delete []m_pLineArray;
m_pLineArray = NULL;
}
// 如果没有分配空间则分配m_iMaxSize大的空间
m_iMaxSize = iSize;
if (m_pLineArray == NULL)
{
m_pLineArray = new Type[m_iMaxSize];
// 分配空间失败,报错并返回错误
if (m_pLineArray == NULL)
{
cout<<"动态分配的存储空间出错!"<<endl;
return false;
}
}
m_iSize = 0;
return true;
}
/***********************************************************************
函数名 : Clear
功能 : 清空线性表
返回值 : 无
------------------------------------------------------------------------
备注 :
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
void CLineArray<Type>::Clear()
{
if (m_pLineArray != NULL)
{
delete []m_pLineArray;
m_pLineArray = NULL;
}
m_iMaxSize = 0;
m_iSize = 0;
}
/***********************************************************************
函数名 : GetElement
功能 : 得到线性表中指定序号为pos的元素
参数 : [IN] const int pos --- 要得到元素的位置
参数 : [OUT] Type& element --- 要得到的元素,通过引用返回
返回值 : true成功找到指定元素,false指定位置不在线性表的范围内,失败
------------------------------------------------------------------------
备注 :
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
bool CLineArray<Type>::GetElement(const int pos, Type& element)
{
if (pos<1 || pos >m_iSize)
{
return false;
}
element = m_pLineArray[pos-1];
return true;
}
/***********************************************************************
函数名 : Traverse
功能 : 遍历一个线性表
返回值 :
------------------------------------------------------------------------
备注 : 当Type类型是用户自己定义的类或结构体时,注意
在用户没有重载<<这个运算符的情况下,输出会出错
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
void CLineArray<Type>::Traverse()
{
for (int i=0; i<m_iSize; i++)
{
cout<<m_pLineArray[i]<<" ";
}
cout<<endl;
}
/***********************************************************************
函数名 : FindElement
功能 : 查找指定元素出现的第一个位置
参数 : [IN] const Type& element --- 要查找的元素
返回值 : 0没有查找到,否则返回元素所在位置(从1开始)
------------------------------------------------------------------------
备注 :
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
int CLineArray<Type>::FindElement(const Type& element)
{
int iPos = -1;
if (m_bSort)
{
// 如果为有序数组,用二分查找法查找
iPos = CArithmetic::BinarySearch(m_pLineArray, m_iSize, element);
}
else
{
iPos = CArithmetic::SequentialSearch(m_pLineArray, m_iSize, element);
}
iPos++;
return iPos;
}
/***********************************************************************
函数名 : Update
功能 : 更新线性表中的一个元素
参数 : [IN] const Type& element --- 更新后的元素的值
参数 : [IN] int iPos --- 要更新元素所在的位置,默认为0意思是更新第一个等于element的元素
返回值 : true更新成功,false更新失败
------------------------------------------------------------------------
备注 :
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
bool CLineArray<Type>::Update(const Type& element, int iPos)
{
bool bRet = false;
if (0 == iPos)
{
int iTemp = -1;
iTemp = FindElement(element);
// 因为查到的元素从1开始计数,所以用在数组中要减1
iTemp--;
if (iTemp>-1 && iTemp<m_iSize)
{
m_pLineArray[iTemp] = element;
bRet = true;
}
}
else if (iPos>0 && iPos<=m_iSize)
{
// 通过序号更新线性表中的元素
m_pLineArray[iPos-1] = element;
// 这种更新不确定线性表是否还是有序的,所以设为无序表
m_bSort = false;
bRet = true;
}
return bRet;
}
/***********************************************************************
函数名 : Insert
功能 : 向线性表中按指定条件插入一个元素
参数 : [IN] const Type& element --- 添加的元素
参数 : [IN] int iPos --- 元素所在的位置,为0是在顺序表中插入元素,
并使表还为有序表;默认-1是在表最后插入一个元素
返回值 : true插入成功,false插入失败
------------------------------------------------------------------------
备注 :
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
bool CLineArray<Type>::Insert(const Type& element, int iPos)
{
if (iPos<-1 || iPos>=m_iSize+2)
{
// 超出范围
return false;
}
if (0 == iPos)
{
//插入有序表
int iTemp = -1;
if (!m_bSort)
{
// 如果为无序数组,先排序
Sort();
}
for (int i=0; i<m_iSize; i++)
{
if (element < m_pLineArray[i])
{
break;
}
}
iPos = i+1;
}
else if (-1 == iPos)
{
// 在最后一个地方插入
iPos = m_iSize + 1;
m_bSort = false;
}
else
{
// 指定插入位置时不确定表还为有序表
m_bSort = false;
}
if (m_iSize == m_iMaxSize)
{
// 原来分配的空件使用完了,扩大原来的空间
int iUnit = sizeof(Type);
m_pLineArray = (Type *)realloc(m_pLineArray, m_iMaxSize*2*iUnit);
if (NULL == m_pLineArray)
{
cout<<"动态分配的存储空间出错!"<<endl;
return false;
}
m_iMaxSize *= 2;
}
for (int i=m_iSize; i>=iPos; i--)
{
m_pLineArray[i] = m_pLineArray[i-1];
}
m_pLineArray[iPos-1] = element;
m_iSize++;
return true;
}
/***********************************************************************
函数名 : Delete
功能 : 从线性表中删除指定元素
参数 : [IN] Type& element --- 删除的元素(如果是序号删除则返回要删除的元素)
参数 : [IN] int iPos --- 元素所在的位置,为0是删除element元素,
默认-1是删除最后一个元素
返回值 : true插入成功,false插入失败
------------------------------------------------------------------------
备注 :
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
bool CLineArray<Type>::Delete(Type& element, int iPos)
{
if (iPos<-1 || iPos>m_iSize)
{
// 超出范围
return false;
}
if (0 == iPos)
{
// 查找要删除的元素element所在的位置
iPos = FindElement(element);
if (iPos < 1)
{
// 未查到element
return false;
}
}
else if (-1 == iPos)
{
// 删除最后一个
iPos = m_iSize;
}
element = m_pLineArray[iPos-1];
for (int i=iPos; i<m_iSize; i++)
{
m_pLineArray[i-1] = m_pLineArray[i];
}
m_iSize--;
if ((float)m_iSize/m_iMaxSize<0.4 && 10 > m_iMaxSize)
{
// 占用空间太多浪费,回收一些
int iUnit = sizeof(Type);
m_pLineArray = (Type *)realloc(m_pLineArray, m_iMaxSize/2*iUnit);
if (NULL == m_pLineArray)
{
cout<<"动态分配的存储空间出错!"<<endl;
return false;
}
m_iMaxSize /= 2;
}
return true;
}
/***********************************************************************
函数名 : Sort
功能 : 对线性表排序
返回值 :
------------------------------------------------------------------------
备注 :
------------------------------------------------------------------------
作者 :
***********************************************************************/
template <class Type>
void CLineArray<Type>::Sort()
{
// 如果线性表的无序表才再行排序
if (!m_bSort)
{
// 直接插入排序法
CArithmetic::StraightInsertionSorting(m_pLineArray, m_iSize);
}
m_bSort = true;
}
数据结构中的顺序表插入操作中if(i<1 || i>L->len+1)中 L-什么意思?还是L->是一个整体呢?部分代码如下:
L是一个
链表
,在链表的
宏定义
typedef中,定义了很多链表的属性,比如说长度len,数据data,或者其他属性,而->的作用在C语言中就是代表某变量的某种属性
比如L->len+1就是取得链表L的长度属性,并且加1.
以上就是春风招生网小编给大家带来的数据结构中的顺序表插入操作中if(i<1 || i>L->len+1)中 L-什么意思?还是L->是一个整体呢?部分代码如下:,希望能对大家有所帮助。更多相关文章关注春风招生网:
www.cfsbcg.com免责声明:文章内容来自网络,如有侵权请及时联系删除。