线性表的应用2(删除顺序表中的元素)
来源:互联网 发布:网络视频地址 编辑:程序博客网 时间:2024/04/28 07:51
一、写一算法,从顺序表中删除自第i个元素开始的k个元素。 (按照下标删除)
方法:循环控制删除即可
代码实现:
#include <iostream>#include <cstdio>#include <cstdlib>#define OVERFLOW -2#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量using namespace std;typedef int ElemType;typedef struct{ ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)} SeqList;int InitList(SeqList &L){ L.elem=(ElemType *)calloc(LIST_INIT_SIZE,sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return 1;}int ListInsert(SeqList &L, int i,ElemType e){ ElemType *newbase,*p,*q; if(i<1||i>L.length+1) return 0; if(L.length>=L.listsize) { newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]); p>=q; --q) { *(p+1)=*p; } *q=e; ++L.length; return 1;}int ListDelet(SeqList &L,int i,ElemType &e){ ElemType *p,*q; if((i<1)||(i>L.length)) return 0; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p; p<=q; ++p) *(p-1)=*p; --L.length; return 1;}void Output(SeqList &L){ for(int i=0; i<L.length; i++) { printf("%d ",L.elem[i]); } printf("\n");}int main(){ SeqList L; int flag,n,n1,k,e; while(scanf("%d",&n)!=EOF) { flag=InitList(L); if(flag==1) { for(int i=0; i<n; i++) { scanf("%d",&e); flag=ListInsert(L,i+1,e); if(flag==0) { cout<<"Inser Fail"<<endl; } } cout<<"The List is:"<<endl; Output(L); scanf("%d%d",&n1,&k); for(int i=1;i<=k;i++) { flag=ListDelet(L,n1,e); if(flag==0) { cout<<"Delete Fail"<<endl; break; } } Output(L); if(flag==1) { cout<<"Delete sucessfully"<<endl; } } else { cout<<"Can not do it!"<<endl; } } return 0;}
二、已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n),空间复杂度为O(1)的算法,删除线性表中所有值为item的数据元素。(按照元素进行删除)
方法:一边遍历,一边按照元素删除
代码实现:
#include <iostream>#include <cstdio>#include <cstdlib>#define OVERFLOW -2#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量using namespace std;typedef int ElemType;typedef struct{ ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)} SeqList;int InitList(SeqList &L){ L.elem=(ElemType *)calloc(LIST_INIT_SIZE,sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return 1;}int ListInsert(SeqList &L, int i,ElemType e){ ElemType *newbase,*p,*q; if(i<1||i>L.length+1) return 0; if(L.length>=L.listsize) { newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]); p>=q; --q) { *(p+1)=*p; } *q=e; ++L.length; return 1;}int ListDelet(SeqList &L,int i,ElemType &e){ ElemType *p,*q; if((i<1)||(i>L.length)) return 0; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p; p<=q; ++p) *(p-1)=*p; --L.length; return 1;}void Output(SeqList &L){ for(int i=0; i<L.length; i++) { printf("%d ",L.elem[i]); } printf("\n");}int main(){ SeqList L; int flag,n,n1,k,e; while(scanf("%d",&n)!=EOF) { flag=InitList(L); if(flag==1) { for(int i=0; i<n; i++) { scanf("%d",&e); flag=ListInsert(L,i+1,e); if(flag==0) { cout<<"Inser Fail"<<endl; } } cout<<"The List is:"<<endl; Output(L); scanf("%d",&k); for(int i=0; i<n; i++) { if(L.elem[i]==k) { flag=ListDelet(L,i+1,e); //第i个元素的下标是i+1 i--; if(flag==0) { cout<<"Delete Fail"<<endl; break; } } } Output(L); if(flag==1) { cout<<"Delete sucessfully"<<endl; } } else { cout<<"Can not do it!"<<endl; } } return 0;}
1 0
- 线性表的应用2(删除顺序表中的元素)
- SDUT 3324顺序表应用1:多余元素删除之移位算法(线性表)
- 顺序表应用-删除元素
- [SDUT](3324)顺序表应用1:多余元素删除之移位算法 ---顺序存储(线性表)
- 第三周项目--顺序表的应用(删除元素)
- 数据结构之删除线性表中的元素
- 删除线性表中的重复元素
- 删除线性表(数组)中的重复元素
- 数据结构学习---线性表顺序存储结构的应用(一):删除操作
- 线性表--删除元素
- python线性表顺序存储结构,删除元素
- 快速检索的方法删除顺序表中的元素
- 对List及类似于线性表的元素 删除的顺序的考虑
- 【应用】线性表的删除
- 3325顺序表的应用2::多余元素删除之建表算法
- 线性表之顺序表2多余元素删除之建表算法 (sdut oj 3325)
- 第三周项目4(1)-顺序表应用 删除区间【x,y】内的元素
- 第三周项目4(1)-顺序表应用 删除区间【x,y】内的元素
- Codeforces Round #251(Div. 2) 439A. Devu, the Singer and Churu, the Joker 水题
- Tixml主页上给的一个遍历方法
- 118. Pascal's Triangle
- 项目2-带武器的游戏角色
- 游戏中的角色类2
- 线性表的应用2(删除顺序表中的元素)
- 第五周 22 分数类的雏形
- Swift语言中问号 ? 和 感叹号 ! 的作用
- matlab自带各种分类器的使用示例
- Spring Scope
- 第6周项目1—IT妹子类的设计
- LeetCode *** 26. Remove Duplicates from Sorted Array
- Pku oj 2159 Ancient Cipher(字符串)
- Framework启动流程(1) - init进程启动过程