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

顺序线性表源码

2013年09月09日 ⁄ 综合 ⁄ 共 2150字 ⁄ 字号 评论关闭

顺序序线性表源码 (C++)

#include "iostream.h"
#include "malloc.h"

#define LIST_INIT_SIZE  5
#define LISTINCREMENT 10

typedef struct{
int  * elem;
int length;
int listsize;

}SqList;

//---------------------函数声明--------------------------
void input(SqList &L);
void output(SqList &L);
int InitList_Sq(SqList &L);
int ListInsert_Sq(SqList &L,int i,int e);
int ListDelete_Sq(SqList &L,int i,int &e);

//----------------------声明全局变量-------------------------
int *p,*q;

//-------------------------主函数-----------------------------
void main()
{
   

    cout<<"========================线性表================="<<endl;
cout<<"**************该线性表中定义的数据类型为整型******************"<<endl;
    cout<<"\n~~~~~~~线性表的初始化操作~~~~~~~~\n";
SqList L;
InitList_Sq(L);
    input(L);
output(L);

   
    cout<<"\n~~~~~~~线性表的插入操作~~~~~~~~\n";
    cout<<"请输入欲插入元素的位置"<<endl;
int i,e;
cin>>i;
cout<<"请输入欲插入元素的值"<<endl;
cin>>e;
ListInsert_Sq(L,i,e);
    output(L);

   
    cout<<"\n~~~~~~~线性表的删除操作~~~~~~~~\n";
    cout<<"请输入欲删除元素的位置"<<endl;
cin>>i;
int d;//d为欲删除元素的值
    ListDelete_Sq(L,i,d);
    output(L);
    cout<<"操作中删除的元素位置为\t"<<i<<",其值为\t"<<d<<endl;
}

int InitList_Sq(SqList &L)
{
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)return 0;
L.length=0;
L.listsize=LIST_INIT_SIZE;

return 1;

}

void input(SqList &L)
{

for (int i=0;i<L.listsize;i++)
{
  cout<<"输入第"<<i<<"个数字:"<<endl;
  cin>>L.elem[i];   //------------------------------------
}
L.length=i;
}
void output(SqList &L)
{    cout<<"\n线性表中的数据元素为:\n"<<endl;
  for (int j=0;j<L.length;j++)
{
  cout<<"第"<<j<<"个数字为:"<<L.elem[j]<<"\t";
}
  cout<<endl;
        cout<<"当前分配的存储容量为"<<L.listsize<<"\t"<<"当前长度为"<<L.length<<endl;//---------------------
 
}
//--------------------------插入操作----------------------------
int ListInsert_Sq(SqList &L,int i,int e)
{
if (i<1||i>L.length+1)
{
  return 0;
}
if (L.length>=L.listsize)
{
  int * newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
  if (!newbase)
  {
   return 0;
  }
  L.elem=newbase;
  L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for (p=&(L.elem[L.length-1]);p>=q;--p)
{
     *(p+1)=*p;
}
*q=e;
++L.length;
return 1;
}
//------------------------删除操作------------------------------
int ListDelete_Sq(SqList &L,int i,int &e)
{
if((i<1)||(i>L.length))
  return 0;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
  *(p-1)=*p;
--L.length;
return 1;
}

 

抱歉!评论已关闭.