数据结构,运用尾指针进行尾插输入数据

该代码运用了尾插法输入数据,将线性表的链式结构代码进行了升级,希望对你们有帮助。
#include
using namespace std;
#define OVERFLOW -1//定义OVERFLOW为-1
#define OK 1
#define ERROR -2
typedef int ElemType;
typedef int Status;

typedef struct LNode { //这个LNode不能省略,否则下面无法识别
ElemType data;
struct LNode *next;
} LNode,*LinkList; //起别名
//结构体的定义

Status InitList(LinkList &L) {
L=new LNode;
L->next=NULL;
return OK;
}//单链表初始化

Status GetElem(LinkList L,int i,ElemType &e) {
LinkList p;
int j=1;
p=L->next;
while(p&&j<i) {
p=p->next;
++j;
}
if(!p||j>i) { //j>i是为了防止i<=0;
cout<<“该数据不存在”;
return ERROR;
}
e=p->data;
return OK;//取了别名,所以不用返回e的值

}//单链表的取值

LNode *LocateElem(LinkList L,ElemType e) {
LinkList p;
p=L->next;
while(p&&p->data!=e) {
p=p->next;
}
return p;
} //单链表的查找

Status ListInsert(LinkList &L,int i,ElemType e) {
LinkList p,s;
p=L;
int j=0;
while(p&&(j<i-1)) {
p-p->next;
++j;
}
if(!p||j>i-1) { // j>i-1是为了防止i<=0;
cout<<“该数据不存在”;
return ERROR;
}
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
} //单链表的插入;

Status ListDelete(LinkList &L,int i) {
LinkList p,q;
p=L;
int j=0;
while(p&&(j<i-1)) {
p-p->next;
++j;
}
if(!p||j>i-1) { // j>i-1是为了防止i<=0;
cout<<“该数据不存在”;
return ERROR;
}
q=p->next;
p->next=q->next;
delete q;
return OK;
} //单链表的删除;

void ListDestory(LinkList &L) {
LinkList p;
while(L) {
p=L;
L=L->next;
delete p;
p=NULL;
L=NULL;
}
}//链表销毁

void ListOut(LinkList L) {
LinkList p;
if(L->next==NULL) {
cout<<“此时无数据”<<endl;
p=NULL;
} else {
while(L->next) {
p=L;
L=L->next;
cout<data;
}
}
cout<<endl;
}//链表的输出

Status ListIn(LinkList &L,int i) {
L=new LNode;
int j=0;
L->next=NULL;
LinkList r,p;
r=L;
for(j=0;j<i;j++)
{
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
return OK;
} //单链表的输入,这个就是尾指针进行的操作

int main() {
int i,a,q;
LNode *L;
InitList(L);
cout<<“请输入要输入多少个数据”<<endl;
cin>>i;
ListIn(L,i);
ListOut(L);
cout<<“这是删除操作”<<endl;
cout<<“请输入你想删除结点的位置”<<endl;
cin>>q;
ListDelete(L,q+1);
ListOut(L);
cout<<“这是插入操作”<<endl;
cout<<“输入你想插入的位置”<<endl;
cin>>a;
ListInsert(L,a+1,2);
ListOut(L);
cout<<“这是查找操作”<<endl;
cout<<LocateElem(L,3);
ListDestory(L);
return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值