线性表的顺序存储
#include<iostream>
#include<cstdlib>
#include<iomanip>
using namespace std;
#define MaxSize 100
#define ElementType int
typedef struct LNode *List;
struct LNode{
ElementType data[MaxSize];
int Length;
}L;
List Ptr;
//初始化
List MakeEmpty()
{
List PtrL;
PtrL=(List)malloc(sizeof(struct LNode));
PtrL->Length=-1;
return PtrL;
}
//查找
int Find(ElementType X,List PtrL)
{
int i=0;
while(i<=PtrL->Length&&PtrL->data[i]!=X)
i++;
if(i>PtrL->Length) return -1;
else return i;
}
//插入
void Insert(ElementType X,int i,List PtrL)
{
int j;
if(PtrL->Length==MaxSize-1)
{
cout<<"表满"<<endl;
return;
}
if(i<1||i>PtrL->Length+2)
{
cout<<"位置不合法"<<endl;
return;
}
for(j=PtrL->Length;j>=i;j--)
PtrL->data[j+1]=PtrL->data[j];
PtrL->data[i-1]=X;
PtrL->Length++;
return;
}
//删除
void Delete(int i,List PtrL)
{
int j;
if(i<1||i>PtrL->Length+1)
{
cout<<"不存在第"<<dec<<i<<"个元素"<<endl;
return;
}
for(j=i;j<=PtrL->Length;j++)
PtrL->data[j-1]=PtrL->data[j];
PtrL->Length--;
return;
}
//例子
int main()
{
int i,j;
Ptr=MakeEmpty();
for(i=0;i<10;i++)
{
Ptr->data[i]=2*i;
Ptr->Length++;
}
j=Find(4,Ptr);
cout<<j<<endl;
return 0;
}
线性表的链式存储
#include<iostream>
#include<cstdlib>
#include<iomanip>
using namespace std;
#define MaxSize 100
#define ElementType int
typedef struct LNode *List;
struct LNode{
ElementType data;
List next;
}L;
//初始化
List ListInit()
{
List PtrL;
PtrL=(List)malloc(sizeof(struct LNode)); //申请结点空间
if(PtrL==NULL){
cout<<"申请空间失败"<<endl; //判断是否有足够的空间
}
PtrL->next=NULL;
return PtrL;
}
//头插法建立单链表(带头结点)
List ListCreat1()
{
List head;
head=ListInit();
ElementType x;
while(cin>>x){
List p;
p=(List)malloc(sizeof(struct LNode));
p->data=x;
p->next=head->next;
head->next=p;
}
return head;
}
//尾插法建立单链表(带头结点)
List ListCreat2()
{
List head;
head=ListInit(); //初始化一个空链表
List r;
r = head; //r始终指向终端结点,开始时指向头结点
ElementType x;
while(cin>>x){
List p;
p=(List)malloc(sizeof(struct LNode)); //申请新的结点空间
p->data=x; //结点的数据域赋值
r->next=p; //将结点插入到表头head-->|1|-->|2|-->NULL
r=p;
}
r->next=NULL;
return head;
}
//求表长
int Length(List PtrL)
{
int j=0;
List p=PtrL; //p指向表中的第一个结点
while(p)
{
j++;
p=p->next;
}
return j;
}
//查找
/*按序号查找*/
List FindKth(int K,List PtrL)
{
List p=PtrL;
int i=1;
while(p!=NULL&&i<K)
{
p=p->next;
i++;
}
if(i==K) return p; /*找到底K个元素,返回指针*/
else return NULL; /*否则返回空指针*/
}
/*按值查找*/
List Find(ElementType X,List PtrL)
{
List p=PtrL;
while(p!=NULL&&p->data!=X)
p=p->next;
return p;
}
//插入
/*不带头结点*/
List Insert(ElementType X,int i,List PtrL)
{
List p,s;
if(i==1) //新节点插在表头
{
s=(List)malloc(sizeof(struct LNode));
s->data=X;
s->next=PtrL;
return s;
}
p=FindKth(i-1,PtrL);
if(p==NULL){
cout<<"参数i错"<<endl;
return NULL;
}else{
s=(List)malloc(sizeof(struct LNode));
s->data=X;
s->next=p->next; //新结点插在第i-1个结点后面
p->next=s;
return PtrL;
}
}
//删除
/*不带头结点*/
List Delete(int i,List PtrL)
{
List p,s;
if(i==1){ //若要删除的是第一个结点
s=PtrL;
if(PtrL==NULL) return NULL;
else PtrL=PtrL->next;
free(s);
return PtrL;
}
p=FindKth(i-1,PtrL); //查找第i-1个结点
if(p==NULL){
cout<<"第i-1个结点不存在"<<dec<<i-1<<endl;
return NULL;
}else if(p->next==NULL){
cout<<"第i个结点不存在"<<dec<<i<<endl;
return NULL;
}else{
s=p->next; //s指向第i个结点
p->next=s->next; //删除结点
free(s); //释放被删除结点
return PtrL;
}
}
//例子
int main()
{
return 0;
}