链表的基本操作(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; }
相关文章推荐
- 块状链表基本操作及相关例题
- 链表基本概念和操作 及 206. Reverse Linked List
- 双链表的基本操作
- 链表 基本操作
- 数据结构--单链表的基本操作(C语言实现)
- 【数据结构】-线性表-链表-1326:链表的基本操作【好题】
- 动态内存分配以及链表的基本操作
- 单链表及其基本操作(C语言实现)
- 单链表基本操作以及一些常见的面试问题
- 双向链表的基本操作
- 数据结构-链表的基本操作实现
- 单链表的基本操作
- 【c语言】单链表的基本操作
- 链表(1)----单链表基本操作
- 链表基本操作
- 单链表的实现及其基本操作
- 数据结构 - C语言版 - 单链表 所有基本操作
- C语言从零开始之数据结构与算法循环链表基本操作(3)
- c数据结构--链表基本操作
- 链表的几个基本操作