数据结构-题目1
来源:互联网 发布:超玩fifaol3数据库 编辑:程序博客网 时间:2024/04/28 03:25
/*一个线性表L采用顺序存储结构,其中所有元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素。要求算法时间复杂度为O(n),空间复杂度为O(1)。*//*思路:扫描顺序表,重建表L。用k记录顺序表L中等于x到y之间的元素个数,一边扫描L,一边统计k值,并将不为x到y之间的元素前移k个位置,最后修改L的长度。*/#include <iostream>#include <malloc.h>#include <cstdio>#include <cstring>using namespace std;#define MaxSize 100typedef int ElemType;typedef struct{ ElemType data[MaxSize]; int length;} SqList;void InitList(SqList *&L) //初始化顺序表L{ L=(SqList *)malloc(sizeof (SqList)); L->length=0;}void ListInsert(SqList *&L,ElemType a[],int n) //采用尾插法依次插入元素{ for(int i=0; i<n; i++) L->data[i]=a[i]; L->length=n;}void DispList(SqList *L) //输出顺序表L{ for(int i=0; i<L->length; i++) cout<<L->data[i]<<" "; cout<<endl;}void delNode(SqList *&L,ElemType x,ElemType y){ int k=0,i=0; while (i<L->length) { if(L->data[i]>=x&&L->data[i]<=y) k++; else L->data[i-k]=L->data[i]; i++; } L->length=L->length-k;}int main(){ ElemType a[10]; for(int i=0;i<=7;i++) cin>>a[i]; SqList *L; InitList(L); ListInsert(L,a,8); cout<<"输出顺序表:"; DispList(L); delNode(L,5,7); cout<<"输出顺序表:"; DispList(L); return 0;}
/*一个线性表L采用顺序存储结构,其中所有元素为整数。设计一个算法,将所有小于0的元素移到所有大于0的元素前面,要求算法时间复杂度为O(n),空间复杂度为O(1)。*//*思路:用i和j分别指向顺序表的第一个元素(i=0)和最后一个元素(j=L->length-1)。当i<j时循环:从右向左扫描,找一个关键字小于等于0的data[j],再从左向右扫描,找一个关键字大于0的data[i],将两者进行交换。*/#include <iostream>#include <malloc.h>#include <cstdio>#include <cstring>using namespace std;#define MaxSize 100typedef int ElemType;typedef struct{ ElemType data[MaxSize]; int length;} SqList;void InitList(SqList *&L) //初始化顺序表L{ L=(SqList *)malloc(sizeof (SqList)); L->length=0;}void ListInsert(SqList *&L,ElemType a[],int n) //采用尾插法依次插入元素{ for(int i=0; i<n; i++) L->data[i]=a[i]; L->length=n;}void DispList(SqList *L) //输出顺序表L{ for(int i=0; i<L->length; i++) cout<<L->data[i]<<" "; cout<<endl;}void move1(SqList *&L){ int i=0,j=L->length-1; ElemType tmp; while(i<j) { while(i<j&&L->data[j]>0) j--; while(i<j&&L->data[i]<=0) i++; if(i<j) { tmp=L->data[i]; L->data[i]=L->data[j]; L->data[j]=tmp; } }}int main(){ ElemType a[10]; for(int i=0; i<=5; i++) cin>>a[i]; SqList *L; InitList(L); ListInsert(L,a,6); cout<<"输出顺序表:"; DispList(L); move1(L); cout<<"输出顺序表:"; DispList(L); return 0;}
/*设计一个算法,将一个带头节点的数据域依次为a1,a2,...,an(n>=3)的单链表的所有节点逆置,即第一个节点的数据域变为an,...,最后一个节点的数据域变为a1。*//*思路:建立一个新链表,采用头插法将L2中的数据依次存入L1中。*/#include <iostream>#include <malloc.h>#include <cstdio>#include <cstring>using namespace std;typedef char ElemType;typedef struct LNode{ ElemType data; struct LNode *next;} LinkList;void InitList(LinkList *&L) //初始化单链表h{ L=(LinkList *)malloc(sizeof (LinkList)); L->next=NULL;}void CreateListR(LinkList *&L,ElemType a[],int n) //采用尾插法依次插入元素{ LinkList *s,*r; int i; L=(LinkList *)malloc(sizeof(LinkList)); r=L; for(i=0; i<n; i++) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=NULL;}void reverse(LinkList *&L1,LinkList *&L2,int n){ LinkList *s,*t; L1=(LinkList *)malloc(sizeof(LinkList)); L1->next=NULL; t=L2->next; for(int i=0;i<n;i++) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=t->data; s->next=L1->next; L1->next=s; t=t->next; }}void DispList(LinkList *L) //输出单链表h{ LinkList *p=L->next; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl;}int main(){ ElemType a[10]; for(int i=0; i<=5; i++) cin>>a[i]; LinkList *L1,*L2; InitList(L1); CreateListR(L1,a,6); cout<<"输出单链表:"; DispList(L1); reverse(L2,L1,6); cout<<"输出单链表:"; DispList(L2); return 0;}
0 0
- 数据结构-题目1
- 数据结构题目
- 数据结构题目
- 数据结构-题目
- 数据结构上机题目1--基本排序
- 数据结构课程设计 题目1 活期储蓄程序
- 经典数据结构题目
- 经典数据结构题目
- 数据结构实习题目
- 数据结构课程设计题目
- 数据结构笔试题目总汇
- 数据结构笔试题目总汇
- 微软 数据结构面试题目
- 数据结构相关经典题目
- 无敌的数据结构题目
- 关于数据结构的题目
- 数据结构笔试题目
- 查找数据结构相关题目
- 堆排序之java
- Go语言学习(九)文件操作
- 第4周项目4-程序分析(1)
- 【OJ中级】坐标移动
- gone fishing
- 数据结构-题目1
- 标记
- 电话面试1 20160323_1916_18min
- oracle 找不到监听
- 基础排序算法
- Eclipse 下 查询和复制类路径的快捷方法
- 递归 example ruler
- 字符编码笔记:ASCII、Unicode、UTF-8 和 Base64
- leetcode 287. Find the Duplicate Number,数组中找重复的数