线性表的基本操作:
List MakeEmpty(): 初始化一个新的空线性表;
ElementType FindKth(List L,int i): 给定指定的位序,返回L中相应的元素ai;
Position Find(List L,ElementType X) :已知X,返回线性表L中与X相同的第一个元素
的位置,若不存在则返回错误信息;
bool Insert(List L,ElementType X,int i):在L的指定位序i前插入一个元素X,成功则返回true,
否则返回false;
bool Delect(List L,int i):从L中删除指定位序i的元素,成功则返回true,否则返回false;
bool Length(List L):返回线性表L的长度;
/**
1)线性表的顺序存储实现:
*/
/**
线性表的基本操作:
List MakeEmpty(): 初始化一个新的空线性表;
ElementType FindKth(List L,int i): 给定指定的位序,返回L中相应的元素ai;
Position Find(List L,ElementType X) :已知X,返回线性表L中与X相同的第一个元素
的位置,若不存在则返回错误信息;
bool Insert(List L,ElementType X,int i):在L的指定位序i前插入一个元素X,成功则返回true,
否则返回false;
bool Delect(List L,int i):从L中删除指定位序i的元素,成功则返回true,否则返回false;
bool Length(List L):返回线性表L的长度;
*/
/**
1)线性表的顺序存储实现:
*/
/**
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define error -1
const int MAXSIZE = 100;
typedef int ElementType;
typedef int Position;
typedef struct LNode * PtrToLNode;
// 这里的位置就是数组的整型下标,从0开始,前面提到的位序是指第几个,从1开始
struct LNode
{
ElementType Data[MAXSIZE];
Position Last;
};
typedef PtrToLNode List;
List MakeEmpty();
ElementType FindKth(List L,int i);
Position Find(List L,ElementType X);
bool Insert(List L,ElementType X,int i);
bool Delect(List L,int i);
int Length(List L);
int main()
{
List L=MakeEmpty();
for(int i=1;i<15;++i)
Insert(L,i,i);
cout << "Insert:\n";
for(int i=0;i<=L->Last;++i)
cout << L->Data[i] << ' ';
cout << endl;
int K=20;
if(FindKth(L,K)!=error)
{
printf("\n第%d号位找到了:\n",K);
cout << "此元素为 " << FindKth(L,K) << endl;
}
else
printf("\n该线性表不存在第%d号位的元素\n",K);
printf("该线性表的元素个数为%d个\n",Length(L));
for(int i=5;i<10;++i)
Delect(L,i);
cout << "Insert:\n";
for(int i=0;i<=L->Last;++i)
cout << L->Data[i] << ' ';
K=5;
if(FindKth(L,K)!=error)
{
printf("\n第%d号位找到了:\n",K);
cout << "此元素为 " << FindKth(L,K) << endl;
}
else
printf("该线性表不存在第%d的元素\n",K);
printf("该线性表的元素个数为%d个\n",Length(L));
return 0;
}
List MakeEmpty()
{
List L;
L=(List) malloc(sizeof(LNode));
L->Last=-1;
return L;
}
ElementType FindKth(List L,int i)
{
if(i<1||i>L->Last)
{
printf("不存在第%d号位的元素\n",i);
return error;
}
else
return L->Data[i-1];
}
Position Find(List L,ElementType X)
{
Position i=0;
while(i<L->Last&&L->Data[i]!=X)
++i;
if(i>=L->Last)
return error;
else
return i;
}
bool Insert(List L,ElementType X,int i)
{
if(L->Last==MAXSIZE-1)
{
printf("表满\n");
return false;
}
if(i<1||i>L->Last+2)
{
printf("位序不合法\n");
return false;
}
for(Position j=L->Last;j>=i-1;--j)
L->Data[j+1]=L->Data[j];
L->Data[i-1]=X;
++L->Last;
return true;
}
bool Delect(List L,int i)
{
if(L->Last<0)
{
printf("表空\n");
return false;
}
if(i<1||i>L->Last+1)
{
printf("位序%d不存在元素\n",i);
return false;
}
for(Position j=i;j<=L->Last;++j)
L->Data[j-1]=L->Data[j];
--L->Last;
return true;
}
int Length(List L)
{
return L->Last+1;
}
*/
2)线性表的链式存储实现
不带头结点的链表创建,插入,删除
/**
2)线性表的链式存储实现
不带头结点的链表创建,插入,删除
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define error NULL
const int MAXSIZE = 100;
typedef int ElementType;
const ElementType inf=1e9;
typedef struct LNode * PtrToLNode;
// 这里的位置就是数组的整型下标,从0开始,前面提到的位序是指第几个,从1开始
struct LNode
{
ElementType data;
PtrToLNode next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;
List MakeEmpty();
ElementType FindKth(List L,int i);
Position Find(List L,ElementType X);
List Insert(List L,ElementType X,int i);
List Delect(List L,int i);
int Length(List L);
int main()
{
List L=MakeEmpty();
for(auto p=L;p;p=p->next)
cout << p->data << ' ' ;
cout << endl;
for(int i=1;i<15;++i)
{
auto tem=Insert(L,i,i);
if(tem!=error)
L=tem;
}
cout << "insert:\n";
for(auto p=L;p;p=p->next)
cout << p->data << ' ' ;
cout << endl;
printf("该线性表的元素个数为%d个\n",Length(L));
int K=20;
if(FindKth(L,K)!=inf)
{
printf("\n第%d号位找到了:\n",K);
cout << "此元素为 " << FindKth(L,K) << endl;
}
else
printf("\n该线性表不存在第%d号位的元素\n",K);
K=5;
if(FindKth(L,K)!=inf)
{
printf("\n第%d号位找到了:\n",K);
cout << "此元素为 " << FindKth(L,K) << endl;
}
else
printf("该线性表不存在第%d的元素\n",K);
printf("该线性表的元素个数为%d个\n",Length(L));
for(int i=5;i<10;++i)
{
auto tem=Delect(L,i);
if(tem!=error)
L=tem;
}
cout << "delect:\n";
for(auto p=L;p;p=p->next)
cout << p->data << ' ' ;
cout << endl;
printf("该线性表的元素个数为%d个\n",Length(L));
auto tem=Delect(L,1);
if(tem!=error)
L=tem;
cout << "delect first node:\n";
for(auto p=L;p;p=p->next)
cout << p->data << ' ' ;
cout << endl;
printf("该线性表的元素个数为%d个\n",Length(L));
return 0;
}
//不带头结点的链表创建:
List MakeEmpty()
{
List L;
L=(List) malloc(sizeof(LNode));
L=NULL;
return L;
}
ElementType FindKth(List L,int i)
{
Position p;
int cnt=1;
p=L;
while(p&&cnt<i)
{
p=p->next;
++cnt;
}
if(p&&cnt==i)
return p->data;
else
return inf;
}
Position Find(List L,ElementType X)
{
Position p=L;
while(p&&p->data!=X)
p=p->next;
if(!p)
return error;
else
return p;
}
List Insert(List L,ElementType X,int i)
{
Position pre,tem;
tem=(Position) malloc(sizeof (LNode));
tem->data=X;
if(i==1)
{
tem->next=L;
return tem;
}
else
{
int cnt=1;
pre=L;
while(pre&&cnt<i-1)
{
pre=pre->next;
++cnt;
}
if(pre==NULL||cnt!=i-1)
{
printf("参入位置参数错误\n");
free(tem);
return error;
}
else
{
tem->next=pre->next;
pre->next=tem;
return L;
}
}
}
List Delect(List L,int i)
{
Position pre=L,tem;
if(i==1)
{
pre=L;
tem=pre->next;
free(pre);
return tem;
}
else
{
int cnt=1;
while(pre&&cnt<i-1)
{
pre=pre->next;
++cnt;
}
if(pre==NULL||cnt!=i-1)
{
printf("参入位置参数错误\n");
free(tem);
return error;
}
else
{
tem=pre->next;
pre->next=tem->next;
free(tem);
return L;
}
}
}
int Length(List L)
{
Position p=L;
int len=0;
while(p)
{
p=p->next;
++len;
}
return len;
}
3)线性表的链式存储实现
带头结点的链表创建,插入,删除
/**
3)线性表的链式存储实现
带头结点的链表创建,插入,删除
*/
/**
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define error NULL
const int MAXSIZE = 100;
typedef int ElementType;
const ElementType inf=1e9;
typedef struct LNode * PtrToLNode;
// 这里的位置就是数组的整型下标,从0开始,前面提到的位序是指第几个,从1开始
struct LNode
{
ElementType data;
PtrToLNode next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;
List MakeEmpty();
ElementType FindKth(List L,int i);
Position Find(List L,ElementType X);
bool Insert(List L,ElementType X,int i);
bool Delect(List L,int i);
int Length(List L);
int main()
{
List L=MakeEmpty();
for(auto p=L->next;p;p=p->next)
cout << p->data << ' ' ;
cout << endl;
for(int i=1;i<15;++i)
Insert(L,i,i);
cout << "insert:\n";
for(auto p=L->next;p;p=p->next)
cout << p->data << ' ' ;
cout << endl;
printf("该线性表的元素个数为%d个\n",Length(L));
int K=20;
if(FindKth(L,K)!=inf)
{
printf("\n第%d号位找到了:\n",K);
cout << "此元素为 " << FindKth(L,K) << endl;
}
else
printf("\n该线性表不存在第%d号位的元素\n",K);
K=5;
if(FindKth(L,K)!=inf)
{
printf("\n第%d号位找到了:\n",K);
cout << "此元素为 " << FindKth(L,K) << endl;
}
else
printf("该线性表不存在第%d的元素\n",K);
printf("该线性表的元素个数为%d个\n",Length(L));
for(int i=5;i<10;++i)
Delect(L,i);
cout << "delect:\n";
for(auto p=L->next;p;p=p->next)
cout << p->data << ' ' ;
cout << endl;
printf("该线性表的元素个数为%d个\n",Length(L));
Delect(L,1);
cout << "delect first node:\n";
for(auto p=L->next;p;p=p->next)
cout << p->data << ' ' ;
cout << endl;
printf("该线性表的元素个数为%d个\n",Length(L));
}
//带头结点的链表创建:
List MakeEmpty()
{
List L;
L=(List) malloc(sizeof(LNode));
L->next=NULL;
return L;
}
ElementType FindKth(List L,int i)
{
Position p;
int cnt=1;
p=L->next;
while(p&&cnt<i)
{
p=p->next;
++cnt;
}
if(p&&cnt==i)
return p->data;
else
return inf;
}
Position Find(List L,ElementType X)
{
Position p=L->next;
while(p&&p->data!=X)
p=p->next;
if(!p)
return error;
else
return p;
}
bool Insert(List L,ElementType X,int i)
{
Position pre,tem;
int cnt=1;
pre=L;
while(pre&&cnt<i)
{
pre=pre->next;
++cnt;
}
if(pre==NULL||cnt!=i)
{
printf("插入位置参数错误\n");
return false;
}
else
{
tem=(Position) malloc(sizeof (LNode));
tem->data=X;
tem->next=pre->next;
pre->next=tem;
return true;
}
}
bool Delect(List L,int i)
{
Position pre=L,tem;
int cnt=1;
while(pre&&cnt<i)
{
pre=pre->next;
++cnt;
}
if(pre==NULL||cnt!=i||pre->next==NULL)
{
printf("参入位置参数错误\n");
return false;
}
else
{
tem=pre->next;
pre->next=tem->next;
free(tem);
return true;
}
}
int Length(List L)
{
Position p=L->next;
int len=0;
while(p)
{
p=p->next;
++len;
}
return len;
}
*/