【文件属性】:
文件名称:单链表.cpp
文件大小:3KB
文件格式:CPP
更新时间:2022-11-19 14:16:26
74
#include"iostream"
#include"string"
#include
#include
using namespace std;
typedef int Status;
typedef int ElemType;
#define OK 1
#define ERROR 0
typedef struct LNode//定义
{
ElemType data;//结点的数据域
struct LNode *next;//结点的指针域
}LNode,*LinkList; //LinkList为结构体LNode的指针类型
Status InitList(LinkList &L)//初始
{
L=new LNode;
L->next=NULL;
return OK;
}
void GreateList_L(LinkList &L,int n)//后插法 输入元素
{
/*L=new LNode;//生成新的结点作为头结点,用头指针L指向头结点
L->next=NULL;//头结点的指针域为空*/
LNode *r;
LNode *p;
r=L; //!!!!错误,定义指针
for(int i=0;i>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
/*void CreateList_L(LinkList &L,int n)//前插法
{
cout<<"输入录取数据个数 ";
cin>>n;
cout<<"输入数据";
L=new LNode;//生成新的结点作为头结点,用头指针L指向头结点
L->next=NULL;//头结点的指针域为空
for(int i=0;i>p->data;
p->next=L->next;
L->next=p;
}
}*/
Status GetElem(LinkList L,int i,int &e)//取值
{
LNode *p;
p=L->next;int j=1;
while(p&&jnext;
++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}
LNode *LocateElem(LinkList L,ElemType e)//查找
{
int j=1;
LNode *p;
p=L->next;
while(p&&p->data!=e)
{
p=p->next;
}
return p;
}
Status LisInsert(LinkList &L,int i,ElemType e)//插入
{
LNode *p;
p=L->next;int j=0;
while(p&&(jnext;
j++;
}
if(!p&&(j>i-1)) return ERROR;
LNode *s;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete(LinkList &L,int i)//删除
{
LNode *p;
p=L->next;int j=0;
while(p&&(jnext;
j++;
}
if(!(p->next)&&(j>i-1)) return ERROR;
LNode *q;
q=p->next;
p->next=q->next;
delete q;
return OK;
}
int main()
{
LNode *L;
int i,temp,n,choose=-1;
int e;
cout << "1. 创建信息表\n";
cout << "2. 查找元素\n";
cout << "3. 插入元素\n";
cout << "4. 删除元素\n";
cout << "0. 退出程序\n\n";
while(choose!=0)
{
cout << "请选择:";
cin >> choose;
switch (choose)
{
case 1: cout<<"请输入元素个数:";
cin>>n;
cout<<"\n"<<"请输入元素";
GreateList_L(L,n);
cout<<"\n";
break;
case 2:cout<<"请输入查找的元素:";
cin>>e;
LNode *s;
s=LocateElem(L,e);
cout<<"这个元素的地址是"<>e;
cout<<"\n"<<"请输入需要插入的位置";
cin>>i;
if(LisInsert(L,i,e)) cout<<"插入成功\n\n";
else cout<<"插入失败\n\n";
break;
case 4: cout<<"请输入删除的位置:";
cin>>i;
if(ListDelete(L,i)) cout<<"删除成功\n\n";
else cout<<"删除失败\n\n";
break;
}
}
}