#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE = 1e6+7;
typedef int ElementType;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
int Last;//顺序表长度length=last+1
} ;
struct LNode L;
List PtrL;
List MakeEmpty();//初始化一个空线性表L;
int Find(ElementType X, List L );//在线性表L中查找X的第一次出现位置;
void Insert(ElementType X, int i, List L);//在位序i前插入一个新元素X;
void Delete(int i, List L );//删除指定位序i的元素;
void printL(List L);
int main() {
PtrL = MakeEmpty();
printL(PtrL);
cout<<"请输入要查找的元素:";
ElementType x;
int ans;
cin>>x;
ans=Find(x ,PtrL );
if(ans==-1)
cout<<"未找到"<<endl;
else
cout<<"该元素在第"<<ans+1<<"个位置"<<endl;
ElementType x2;
int pos;
cout<<"请输入要插入的元素:";
cin>>x2;
cout<<"请输入要插入的位置:";
cin>>pos;
Insert(x2, pos, PtrL);
printL(PtrL);
int pos2;
cout<<"请输入要删除的位置:";
cin>>pos2;
Delete(pos2, PtrL);
printL(PtrL);
return 0;
}
List MakeEmpty() {
List Ptrl;
int length;
Ptrl = (List )malloc(sizeof(struct LNode));
Ptrl->Last=-1;
printf("请输入表长:");
cin>>length;
for(int i = 0; i < length; i++) {
printf("请输入第%d个元素:",i+1);
cin>>Ptrl->Data[i];
Ptrl->Last++;
}
return Ptrl;
}
int Find(ElementType X, List L ) {
int index = 0;
while(index <= PtrL->Last && PtrL->Data[index]!= X)
index++;
if(index > PtrL->Last)
return -1;
else
return index;
//找到了返回下标i,没找到返回-1;
}
void Insert(ElementType X, int i, List L) {
if(PtrL->Last == MAXSIZE-1) {
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;//将X插入到位置i(下标i-1)
PtrL->Last++;//长度+1,指向最后一个元素
return ;
}
void Delete(int i, List L ) {
if( i < 1 || i > PtrL->Last+1) {
//删除位置在表外
cout<<"不存在当前元素"<<endl;
return ;
}
for(int j = i ; j <= PtrL->Last ; j++)
PtrL->Data[j-1]=PtrL->Data[j];
PtrL->Last--;
return ;
}
void printL(List L) {
printf("共有%d个元素:\n",L->Last+1);
for(int i = 0; i<= L->Last ; i++)
cout<<L->Data[i]<<" ";
cout<<endl;
return ;
}
链式表:
#include<bits/stdc++.h>
using namespace std;
typedef int ElementType;
typedef struct LNode *List;
struct LNode {
ElementType Data;
List Next;
};
List Head_PtrL;
List Tail_PtrL;
List Head_MakeEmpty();//前插法初始化一个线性表L;
List Tail_MakeEmpty();//后插法初始化一个线性表L;
void Head_printL( List L );
void Tail_printL( List L );
List FindKth( int K, List L );//根据位序K,返回相应元素 ;
List Find( ElementType X, List PtrL );//根据元素X,返回相应位置;
void Insert( ElementType X, int i, List L);//在位序i前插入一个新元素X;
void Delete( int i, List L );//删除指定位序i的元素;
int Length( List L );//返回线性表L的长度n。
int main() {
//头插法
Head_PtrL = Head_MakeEmpty();
Head_printL( Head_PtrL );
//尾插法
Tail_PtrL = Tail_MakeEmpty();
Tail_printL( Tail_PtrL );
return 0;
}
List Head_MakeEmpty() {
List p;
p = (List )malloc(sizeof(struct LNode));
p->Next = NULL;
int length;
cout<<"请输入表长:";
cin>>length;
List node;
for(int i = 0; i < length; i++) {
printf("请输入第%d个元素:",i+1);
int x;
cin>>x;
node = (List )malloc(sizeof(struct LNode));
node->Data = x;
node->Next = p->Next;
p->Next = node;
}
return p;
}
void Head_printL( List L ) {
List a = L;
while(a->Next) {
cout<<a->Next->Data<<" ";
a=a->Next;
}
cout<<endl;
return ;
}
List Tail_MakeEmpty() {
List p,temp;
p = (List )malloc(sizeof(struct LNode));
p->Next = NULL;
temp = p;
int length;
cout<<"请输入表长:";
cin>>length;
List node;
for(int i = 0; i < length; i++) {
printf("请输入第%d个元素:",i+1);
int x;
cin>>x;
node = (List )malloc(sizeof(struct LNode));
node->Data = x;
temp->Next = node;
temp = node;
}
temp->Next = NULL;
return p;
}
void Tail_printL( List L ) {
List a = L;
while(a->Next) {
cout<<a->Next->Data<<" ";
a=a->Next;
}
cout<<endl;
return ;
}