#include<iostream>
#include<stdlib.h>
using namespace std;
//链式线性表的存储结构
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;//定义LinkList
//初始化线性表(链表)头插法
Status StartHeadElem(LinkList *L,int m)
{
LinkList p;
int i;
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
for(int i=0;i<m;i++)
{
p=(LinkList)malloc(sizeof(Node));
cin>>p->data;
p->next=(*L)->next;
(*L)->next=p;
}
}
//初始化线性表(链表)尾插法
Status StartTailElem(LinkList *L,int m)
{
LinkList p,r;
int i;
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
r=(*L);
for(int i=0;i<m;i++)
{
p=(Node *)malloc(sizeof(Node));
cin>>p->data;
r->next=p;//指针的指向
r=p;//变量之间的交换
}
r->next=NULL;
return OK;
}
//获得元素操作
Status GetElem(LinkList L ,int i,ElemType *e)
{
int j;
LinkList p;
p=L->next;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j>i||!p)
{
return ERROR;
}
*e =p->data;
return OK;
}
//插入元素操作
Status ListInsert(LinkList *L,int i,ElemType e)
{
int j;
LinkList p,s;
p=*L;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j>i||!p)
{
return ERROR;
}
s=(LinkList)malloc(sizeof(Node));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
//删除元素操作
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j;
LinkList p,q;
p=*L;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j>i||!p)
{
return ERROR;
}
q=p->next;
*e=q->data;
p->next=q->next;
free(q);
return OK;
}
Status ListDisplay(LinkList *L)
{
LinkList p;
p=(*L)->next;
if(!p)
{
return ERROR;
}
while(p)
{
cout<<p->data<<"->";
p=p->next;
}
cout<<endl;
return OK;
}
int main()
{
Node *n;
int m;
cout<<"输入初始化元素的数目"<<endl;
cin>>m;
cout<<"输入初始化元素"<<endl;
StartTailElem(&n,m);
cout<<"输入获得元素的序号"<<endl;
int e,num;
cin>>num;
GetElem(n,num,&e);
cout<<"该序号的元素:"<<e<<endl;
int numb,nums;
cout<<"输入插入元素的序号和数"<<endl;
cin>>numb>>nums;
ListInsert(&n,numb,nums);
cout<<"输入删除元素的序号"<<endl;
int es,numss;
cin>>numss;
ListDelete(&n,numss,&es);
cout<<"该序号的元素:"<<es<<endl;
ListDisplay(&n);
}
数据结构那点事--线性表(链表)
最新推荐文章于 2024-01-14 15:38:56 发布