线性表专题(未完待续)
来源:互联网 发布:实木衣柜 知乎 编辑:程序博客网 时间:2024/06/05 17:50
Problem Link:http://codeup.cn/problemset.php?search=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E9%AB%98%E5%88%86%E7%AC%94%E8%AE%B0
1323: 算法2-1:集合union
题目描述
上图算法中,在第8行取得集合B中的元素,然后再在第10行插入到集合A中。你的任务是先输出集合A和集合B中的元素,每个集合在一行中输出。然后每次在将集合B中的元素取出插入到集合A尾部后输出集合A中的元素。当然你的代码可以和上面的代码不一样,只要有相同的输出即可。
输入
有多组测试数据,每组测试数据占两行。第一行是集合A,第一个整数m(0<m<=100)代表集合A起始有m个元素,后面有m个整数,代表A中的元素。第二行是集合B,第一个整数n(0<n<=100)代表集合B起始有n个元素,后面有n个整数,代表B中的元素。每行中整数之间用一个空格隔开。
输出
每组测试数据输出n+2行:前两行分别输出集合A、集合B中的数据,后面n行是每次从B中取出元素插入到A尾部后的集合A。每行整数之间用一个空格隔开,每组测试数据之间用一行空行隔开。
样例输入
样例输出
提示
来源
数据结构高分笔记
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#include<queue>#include<map>#define LL long long#define MAXN 1000010using namespace std;const int INF=0x3f3f3f3f;int A[222],B[222];int vis[MAXN]; int main(){//freopen("D:\\in.txt","r",stdin);int m,n,i,j;while(scanf("%d",&m)!=EOF){memset(vis,0,sizeof(vis));for(i=0;i<m;i++){scanf("%d",&A[i]);vis[A[i]]=1;}scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&B[i]);}printf("%d",A[0]);for(j=1;j<m;j++){printf(" %d",A[j]);}printf("\n");printf("%d",B[0]);for(j=1;j<n;j++){printf(" %d",B[j]);}printf("\n");for(i=0;i<n;i++){if(!vis[B[i]]){A[m++]=B[i];printf("%d",A[0]);for(j=1;j<m;j++){printf(" %d",A[j]);}printf("\n");}else{printf("%d",A[0]);for(j=1;j<m;j++){printf(" %d",A[j]);}printf("\n");}}printf("\n");}return 0;}
1324: 算法2-2:有序线性表的有序合并
题目描述
输入
有多组测试数据,每组测试数据占两行。第一行是集合A,第一个整数m(0<=m<=100)代表集合A起始有m个元素,后面有m个非递减排序的整数,代表A中的元素。第二行是集合B,第一个整数n(0<=n<=100)代表集合B起始有n个元素,后面有n个非递减排序的整数,代表B中的元素。每行中整数之间用一个空格隔开。
输出
每组测试数据只要求输出一行,这一行含有 m+n 个来自集合 A 和集合B 中的元素。结果依旧是非递减的。每个整数间用一个空格隔开。
样例输入
样例输出
提示
本题书中提供的算法是基于顺序表的。在使用顺序表时需要两倍于数据元素数目。如果使用链表则只需要存储一倍的元素。然而使用链表同样需要存储一倍的指针。所以对于这类问题数据结构的选取,如果数据域占用的空间很大则可以使用链表存储来节省空间,而对于数据域占用不大的情况,则使用顺序表也可以。
来源
数据结构高分笔记
AC code:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#include<queue>#include<map>#define LL long long#define MAXN 1000010using namespace std;const int INF=0x3f3f3f3f;int A[MAXN],B[MAXN],C[MAXN];int main(){//freopen("D:\\in.txt","r",stdin);int m,n,i,j,len;while(scanf("%d",&m)!=EOF){for(i=1;i<=m;i++){scanf("%d",&A[i]);}scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&B[i]);}i=j=1;len=0;while(i<=m&&j<=n){if(A[i]<=B[j]){C[++len]=A[i];i++;}else{C[++len]=B[j];j++;}}while(i<=m){C[++len]=A[i];i++;}while(j<=n){C[++len]=B[j];j++;}if(len!=0){printf("%d",C[1]);for(i=2;i<=len;i++){printf(" %d",C[i]);}printf("\n");}else//注意为空的情况 {printf("\n");}}return 0;}
1325: 算法2-3~2-6:Big Bang
题目描述
输入
输入数据只有一组,有很多行。每行的格式可能是下列一种:
insert a name
delete name
show
search name
其中 a 是一个整数,代表在第a个名字前插入名字。name是一个姓名,只包含英文字母的大小写,每个名字不超过30个字符。
输入保证不会插入列表中已经存在的姓名,不会删除列表中不存在的姓名,也不会搜索列表中不存在的姓名。
输出
起始时,列表是空的。只输出show和search name 的结果。show将列表中的姓名全部输出,search只输出找到该名字的序号(从1开始)。每次输出占一行,姓名间用空格隔开。如果列表中没有名字了,show时也要输出一个空行。
样例输入
样例输出
提示
来源
数据结构高分笔记
#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm> #define MAXN 1000010using namespace std;string names[111];int len;void insert(int pos,string name){int i;for(i=len;i>=pos;i--){names[i+1]=names[i];}names[pos]=name;len++;}int search(string name){int i;for(i=1;i<=len;i++){if(names[i]==name)return i;}}void delet(string name){int i,pos;pos=search(name);for(i=pos;i<len;i++){names[i]=names[i+1];}len--;}void show(){int i;if(len==0)puts("");else{cout<<names[1];for(i=2;i<=len;i++){cout<<" "<<names[i];}cout<<endl;}}int main(){//freopen("D:\\in.txt","r",stdin);string op,name;int id;len=0;while(cin>>op){if(op=="insert"){cin>>id>>name;insert(id,name);}else if(op=="show"){show();}else if(op=="search"){cin>>name;cout<<search(name)<<endl;}else if(op=="delete"){cin>>name;delet(name);}}return 0;}
问题 I: 算法2-8~2-11:链表的基本操作
题目描述
输入
输出
样例输入
样例输出
提示
#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm> #define MAXN 1000010#define ERROR 0#define OK 1using namespace std;typedef int ElemType;typedef bool Status;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;Status GetElem_L(LinkList &L,int i,ElemType &e){LinkList p;p=L->next;int j=1;while(p && j < i ){p=p->next;++j;}if(!p || j>i)return ERROR;e = p->data;return OK;}Status ListInsert_L(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)return ERROR;s=(LinkList) malloc (sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;}Status ListDelete_L(LinkList &L,int i,ElemType &e){LinkList p,q;p=L;int j=0;while(p->next && j<i-1){p=p->next;++j;}if(!(p->next) || j>i-1)return ERROR;q=p->next;p->next=q->next;e=q->data;free(q);return OK;}void CreateList_L(LinkList &L,int n){LinkList p;int i;L=(LinkList) malloc(sizeof(LNode));L->next=NULL;for(i=n;i>0;--i){p=(LinkList) malloc(sizeof(LNode));scanf("%d",&p->data);p->next=L->next;L->next=p;}}void ShowList_L(LinkList L){LinkList p;p=L->next;if(p==NULL) printf("Link list is empty\n");else{printf("%d",p->data);//注意输出格式p=p->next;while(p){printf(" %d",p->data);p=p->next;}printf("\n");}}int main(){//freopen("D:\\in.txt","r",stdin);int n,m,i,e,s,cnt;LinkList L;char op[55];scanf("%d",&n);CreateList_L(L,n);//ShowList_L(L);scanf("%d",&m);for(cnt=0;cnt<m;cnt++){scanf("%s",op);if(strcmp(op,"show")==0){ShowList_L(L);}else if(strcmp(op,"delete")==0){scanf("%d",&i);s=ListDelete_L(L,i,e);if(s==OK)printf("delete OK\n");elseprintf("delete fail\n");}else if(strcmp(op,"insert")==0){scanf("%d%d",&i,&e);s=ListInsert_L(L,i,e);if(s==OK) printf("insert OK\n");else printf("insert fail\n");}else if(strcmp(op,"get")==0){scanf("%d",&i);s=GetElem_L(L,i,e);if(s==ERROR)printf("get fail\n");elseprintf("%d\n",e);}}return 0;}
- 线性表专题(未完待续)
- 线性回归学习总结(未完待续)
- 顺序表的操作(未完待续)
- 链表的操作(未完待续)
- POJ1753(未完待续)
- TreeMap(未完待续)
- HashTable(未完待续)
- string(未完待续)
- 方向(未完待续)
- 红黑树(未完待续)
- 源代码(未完待续)
- 绪论(未完待续)
- (未完待续)
- 第七节:关于优化,线性汇编和汇编(未完待续)
- 认识Shark(未完待续)
- 一些算法(未完待续)
- 一些数据结构(未完待续)
- Struts2优缺点(未完待续)
- speex和opus的复用形式
- 【转载】Runtime那些事儿(消息机制)
- Web应用web.xml的Struts2的配置
- IOS关于tableview自动下移
- Myeclipse如何自动创建hibernate
- 线性表专题(未完待续)
- 10种分层模式
- 网站遭遇CC及DDOS攻击紧急处理方案
- *LINUX基础命令使用
- javascript编程规则
- AdobeRGB与sRGB详解
- 在微信浏览器中做分享到朋友圈和分享到好友
- Bootstrap知识点
- TCP协议中的三次握手和四次挥手