您的位置:首页 > 其它

链表的基本操作(STL版和非STL版)

2018-03-12 23:51 302 查看
#include<bits/stdc++.h>
using namespace std;
list<int>s;
list<int>::iterator it;
char x[10];
int main()
{
int n,b,m,a,e;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&b);
s.push_front(b);
}
scanf("%d",&m);
while(m--)
{
scanf("%s",x);
if(x[0]=='s')
{
if(s.empty())
printf("Link list is empty\n");
else
{
int flag=1;
for(it=s.begin();it!=s.end();it++)
{
if(flag)
flag=0;
else printf(" ");
printf("%d",*it);
}
printf("\n");
}
}
else if(x[0]=='d')
{
scanf("%d",&a);
if(a>=1&&a<=n)
{
int j=0;
for(it=s.begin();it!=s.end();it++)
{
if(j==a-1)
{
s.erase(it);
n--;
break;
}
j++;
}
printf("delete OK\n");
}
else printf("delete fail\n");
}
else if(x[0]=='g')
{
scanf("%d",&a);
if(a>=1&&a<=n)
{
int j=0;
for(it=s.begin();it!=s.end();it++)
{
if(j==a-1)
{
printf("%d\n",*it);
break;
}
j++;
}
}
else printf("get fail\n");
}
else if(x[0]=='i')
{
scanf("%d%d",&a,&e);
if(n==0)
{
if(a==1)
{
s.push_front(e);
n++;
printf("insert OK\n");
}
else printf("insert fail\n");
}
else
{
if(a>=1&&a<=n)
{
int j=0;
for(it=s.begin();it!=s.end();it++)
{
if(j==a-1)
{
s.insert(it,e);
n++;
printf("insert OK\n");
break;
}
j++;
}
}
else printf("insert fail\n");
}
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
int a;
int len;
struct node *next;
}node,*Link;
void input(Link &L,int n)
{
L->next=NULL;
node *p,*r=L->next;
L->len=n;
while(n--)
{
p=new node;
scanf("%d",&p->a);
L->next=p;
p->next=r;
r=p;
}
}
void output(Link &L)
{
int flag=1;
if(L->next)
{
node *p=L->next;
while(p)
{
if(flag) flag=0;
else printf(" ");
printf("%d",p->a);
p=p->next;
}
printf("\n");
}
else printf("Link list is empty\n");
}
void ge(Link &L,int k)
{
if(k>=1&&k<=L->len)
{
node *p=L->next;
int j=1;
while(j!=k)
{
p=p->next;
j++;
}
printf("%d\n",p->a);
}
else printf("get fail\n");

}
void inserts(Link &L,int k,int b)
{
if(k>=1&&k<=L->len+1)
{
node *p=L->next,*r,*d=L;
r=new node;
r->a=b;
int j=1;
while(j!=k&&p)
{
d=p;
p=p->next;
j++;
}
d->next=r;
r->next=p;
L->len++;
printf("insert OK\n");
}
else printf("insert fail\n");
}
void deletes(Link &L,int k)
{
if(k>=1&&k<=L->len)
{
node *p=L->next,*r=L,*y;
int j=1;
while(j!=k&&p)
{
r=p;
p=p->next;
j++;
}
y=p;
r->next=p->next;
delete y;
printf("delete OK\n");
L->len--;
}
else printf("delete fail\n");
}
int main()
{
int n,m,k,x;
char s[10];
scanf("%d",&n);
node *L;
L=new node;
input(L,n);
scanf("%d",&m);
while(m--)
{
scanf("%s",s);
if(s[0]=='s')
output(L);
else if(s[0]=='g')
{
scanf("%d",&k);
ge(L,k);
}
else if(s[0]=='i')
{
scanf("%d%d",&k,&x);
inserts(L,k,x);
}
else if(s[0]=='d')
{
scanf("%d",&k);
deletes(L,k);
}
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: