现在的位置: 首页 > 综合 > 正文

数据结构–关于线性表删除元素

2013年09月19日 ⁄ 综合 ⁄ 共 1289字 ⁄ 字号 评论关闭
#include <iostream>

using namespace std;

#define LIST_INIT_SIZE 100 //初始化分配量

#define LISTINCREMENT 10 //存储空间的分配增量


typedef int Status;

typedef int ElemType;

typedef struct{

	ElemType *elem;//储存空间基址

	int length;//当前长度

	int listsize;//当前的分配的存储容量 (以sizeof (ElemType)为单位)
}SqList;

Status InitList_sq(SqList &L){

	L.elem = (ElemType *)malloc(LIST_INIT_SIZE *sizeof(ElemType));

	if ( !L.elem)exit(1);//存储分配失败

	L.length = 0; //空表长度为0

	L.listsize =LIST_INIT_SIZE;//初始储存容量

	return true;
}
Status ListInsert_Sq(SqList &L,int i,ElemType e)  
{  
    //在顺序线性表L中第i个位置之前插入新的元素e   
    //i的合法值为1<=i<=ListLength_Sq(L)+1   
    if(i <1 || i> L.length + 1)  
        return false;   //i值不合法   
    if(L.length >= L.listsize)   //当前存储空间已满,增加分配   
    {  
        ElemType *newbase = (ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT )* sizeof(ElemType));  
        if(!newbase)  
            exit(1);    //存储分配失败   
        L.elem = newbase;//新基址   
        L.listsize += LISTINCREMENT;    //增加存储容量   
    }  
  
    ElemType *q = &(L.elem[i-1]);//q为插入位置   
  
    for(ElemType *p = &(L.elem[L.length-1]);p>=q;--p)  
        *(p+1) = *p;    //插入位置及之后的元素右移   
  
    *q = e;     //插入e   
    ++L.length;     //表长增1   
    return true;  
}  
  
Status ListDelete_Sq(SqList &L,int i )
{
 
	if (( i <1) ||(i>L.length)) return false;
			
	ElemType *p = & (L.elem[i-1]);//p为被删除元素的位置

	   	ElemType e = *p ; // 被删除元素的值为e

	ElemType	*q = L.elem+L.length-1;//表尾元素的位置

		for(++p;p<=q;++p)
			*(p-1) = *p; //被删除元素之后的元素左移

		--L.length;

		return e;
}

int main()  
{  
    SqList L;  

    InitList_sq(L); 
	
    ListInsert_Sq(L,1,1234); 

    ElemType e = ListDelete_Sq(L,1);
   
    cout << e <<endl;


    return 0;  
}

 

 

感言: 与上一个线性表插入元素相比 此代码是完成的删除元素的展示;

抱歉!评论已关闭.