线性结构的顺序存储和链式存储的实现代码(一)

       线性结构的物理存储主要有两种方式:顺序存储和链式存储。线性结构中一个数据元素是没有什么意义的,所有的数据元素构成一个整体才有意义。为了对这个整体有一个大方为的管理,所以,我们应该建立关于这个整体的头,数据元素的类型另说。以后写关于数据结构的代码都是基于C++这门语言来实现。

       线性结构的顺序存储方式的代码(C++的内容略)

//加载的头文件
# include<iostream.h>
# include<stdlib.h>

//宏的定义
# define MAXSIZE 10
# define ADD 10

//表头数据类型
typedef struct
  {
int *List; //用于存放数组的首地址
int curlen;//当前这个表(数组)存了多少个数据了
int maxsize;//这个表最大可以存放的数据个数
  }ArrList;


//初始化一个线性表
void IniList(ArrList &L)
   {
L.List=new int[MAXSIZE];  //这个表的list存放着一个一位数组的首地址,用于存放数据
if(!L.List)
           {
                cout<<"线性表的初始化出现错误!\n";   
return;   //if 语句判断上一条语句是否被正确的执行了
           }
L.curlen=0;   //这个表当前一个数据也没有存
L.maxsize=MAXSIZE;  //这个表最大可以存放10个数据
    }

//初始连续输入n个元素
void Creatlist(ArrList &L,int n)
   {
int i;
int e;
for(i=0;i<n;i++)
{
                cout<<"请输入第"<<i+1<<"数:";  
cin>>e;
L.List[i]=e;
}
L.curlen=n;
        cout<<"您的操作已完成!\n";
   }

//显示表中的元素
void Display(ArrList L)
   {
int i;
for(i=0;i<L.curlen;i++)
{
  if((i+1)%5==0 )
               cout<<"\n";  
           cout<<"L["<<i<<"]"<<"="<<L.List[i]<<"  ";
}
        cout<<"\n您的操作已完成!\n";
   }

//插入一个元素
void Inlist(ArrList &L,int i,int e)
   {
if(i<1||i>L.curlen+1)
  {
             cout<<"您的插入位置不正确!\n";
             return;
            } 
if(L.curlen>=L.maxsize)//如果因为表不能插入数据时,那么就扩大一位数组的大小
  {
             int * relist;
             int q;
             relist=new int[L.maxsize+ADD];
             for(q=0;q<L.maxsize;q++)
                 relist[q]=L.List[q];
             free (L.List);
             L.List=relist;              
           }
  int j;
for(j=L.curlen;j>=i;j--)//使要插入数据的位置的原来数据向后动一个单位
{
L.List[j]=L.List[j-1];
}
L.List[i-1]=e;
L.curlen++;
cout<<"您的操作已经成功完成!";
   }

//删除一个元素
void Deletelist(ArrList &L,int i)
   {
if((i<1)||(i>L.curlen))
            {
                cout<<"您输入到位置错误!\n"; 
return ;
            }
for(++i;i<=L.curlen;++i)
L.List[i-1]=L.List[i];
--L.curlen;
cout<<"您的操作已完成!\n";
   }

void main()
   {
ArrList a;
int m;
        int n;
IniList(a);
        int option;
        option=-1; 
        while(option!=0)
             {
  cout<<"\n\n\n\n";
  cout<<"                   菜单\n\n";
               cout<<"          0:退出\n";
               cout<<"          1:初始连续输入元素\n";
               cout<<"          2:插入元素\n";
               cout<<"          3:删除元素\n";
               cout<<"          4:显示线性表中的元素\n\n\n\n";
               cout<<"请选择您的操作:";
               cin>>option;     
               switch (option)
                  {
                     case 0 :
                               option=0;
                               break;
                     case 1 :  
                               cout<<"请输入连续输入数据的个数:";
                               cin>>n;
                               Creatlist(a,n);
                               break;
                     case 2 :
                               cout<<"请输入插入元素的位置:";
                               cin>>n;
                               cout<<"请输入插入元素的值:";
                               cin>>m;
                               Inlist(a,n,m);
                               break;
                     case 3 :
                               cout<<"请输入删除元素的位置:";
                               cin>>n;
                               Deletelist(a,n);
                               break;
                     case 4 :
                               Display(a);
                               break;
    default : 
       cout<<"请输入正确的选项";
       break;
                  }
            } 
   }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值