数据结构--如何对一个线性表里面的元素赋值,并且显示插入一个数据后的情况

#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,int n){

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

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

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

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

	cout << "请输入表中的数据" <<endl;



	for ( int i = 0; i < n ; i ++)
	{
		
			cin >> L.elem[i];
			++L.length;
 
			if(L.length>=L.listsize)

			{

			ElemType *newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
  
				if(!newbase)

					exit(0);
 
				L.elem=newbase;
  
				L.listsize+=LISTINCREMENT;

			}
  }
	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   
	
	ElemType l = *q; //用一个自定义的变量 返回指针q中所指代的值
    return l;    
} 

 Status display_sq(SqList &L,int n){

	 for ( int i = 0; i <=n ; i ++)
	 {
		 cout << L.elem[i]<<endl;
	 }
	 return true;
 }
	

int main()    
{    
    SqList L;    
  
    InitList_sq(L,5);
    
  	 ListInsert_Sq (L,1,78282822);
	
	cout <<"在首位置插入元素后,线性表变成如下表示 "<<endl;
 
     display_sq(L,5);
	
	return 0;
}  
 
  
  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值