本代码实现了线性表顺序存储
完成了下列算法
- 建立空表
- 寻找
- 插入
- 删除
#include<iostream>
#define maxsize 10
using namespace std;
typedef int ElementType;
typedef struct Lnode* List;
/*注意:last是数组中最后一个元素的位置,由于数组是从0开始计数,
所以最后一个元素为i时,last等于i-1。*/
/*由于maxsize太大(顺序存储不可避免造成空间浪费)
,后面的数据为垃圾数据。*/
struct Lnode {
ElementType data[maxsize];
int last;
};
List MakeEmpty()//构造空链表
{
List ptrl;
ptrl=(List)malloc( sizeof( struct Lnode ) );
ptrl->last=-1;
return ptrl;
}
int Find ( List ptrl ,ElementType x )
{
int i=0;
while( i<=ptrl->last && ptrl->data[i]!=x ){
i++;
}
if( i<=ptrl->last )
return i+1;
else
return -1;
}
/*注意:last是数组中最后一个元素的位置,由于数组是从0开始计数,
所以最后一个元素为i时,last等于i-1。*/
void Insert (List ptrl, int i, ElementType x)//在第i个元素处插入x元素
{
if(ptrl->last == maxsize-1){ //先判断位置i是否合法
cout<<"链表满"<<endl;
return;
}
if(i<1 || i>ptrl->last+2){
cout<<"位置越界"<<endl;
return;
}
for(int j=ptrl->last; j>=i-1; --j){
ptrl->data[j+1] = ptrl->data[j];
}
ptrl->data[i-1] = x;
ptrl->last ++;
}
void Delete (List ptrl, int i )//删除第i个元素
{
if(i<1 || i>ptrl->last+2){ //先判断位置i是否合法
cout<<"位置越界"<<endl;
return;
}
for(int j=i-1; j<=ptrl->last; ++j){
ptrl->data[j] = ptrl->data[j+1];
}
ptrl->last --;
}
int main()
{
List list1;
list1=MakeEmpty();
Insert(list1 ,1 ,111 );
Insert(list1 ,2 ,222 );
Insert(list1 ,3 ,333 );
Insert(list1 ,5 ,444 );
int x=222;
cout<<"元素"<<x<<"在第"<<Find( list1, x)<<"处"<<endl;
for( int i : list1->data )
cout<<i<<endl;
cout<<"list->last = "<<list1->last<<endl;
cout<<endl;
Delete( list1, 2);
for( int i : list1->data )
cout<<i<<endl;
cout<<"list->last = "<<list1->last<<endl;
return 0;
}