该代码运用了尾插法输入数据,将线性表的链式结构代码进行了升级,希望对你们有帮助。
#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;
}