博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4)线性表[顺序表和链表]
阅读量:5842 次
发布时间:2019-06-18

本文共 5257 字,大约阅读时间需要 17 分钟。

顺序表:

1 #include
2 using namespace std; 3 4 enum error{rangeerror,underflow,overflow,success}; 5 const int maxlen=1000; 6 7 class list{ 8 public: 9 list(); 10 int length()const;//求长度 11 int get_int(const int i,int &x)const;//按序号取元素运算 12 int locate(const int x)const;//搜索元素运算对应的函数 13 int insert(const int i,const int x);//插入元素运算对应的函数 14 int dele(const int i);//删除元素运算对应的函数 15 private: 16 int data[maxlen]; 17 int count; 18 }; 19 20 21 list::list(){
//初始顺序表化 22 count=0; 23 } 24 25 int list::length()const{
//求表长度的实现 26 return count; 27 } 28 29 int list::get_int(const int i,int &x)const{
//按序号求元素 30 if(i<=0||i>count)return underflow; 31 else { 32 x=data[i-1]; 33 return success; 34 } 35 } 36 37 int list::locate(const int x)const{
//查找元素 38 bool flags=false; 39 for(int i=0;i
length()+1)return rangeerror;//插入范围有错 52 else { 53 for(int j=count-1;j>=i-1;j--){ 54 data[j+1]=data[j]; 55 } 56 data[i-1]=x; 57 count++; 58 return success; 59 } 60 } 61 62 63 int list::dele(const int i){
//删除元素 64 int j; 65 if(length()==0)return underflow; 66 if(i<1||i>length())return rangeerror; 67 else { 68 for(j=i+1;j<=length();j++){ 69 data[j-2]=data[j-1]; 70 } 71 count--; 72 return success; 73 } 74 } 75 76 77 bool subset(list A,list B){
//判断集合A是否是集合B 的子集 78 int ia,ib,x,y; 79 bool flags; 80 bool suc=true; 81 for(ia=0;ia
y){114 C.insert(ic,y);115 ic++;116 ib++;117 }else {118 C.insert(ic,x);119 ic++;120 ia++;121 }122 }123 124 while(ia

 

链表:

1 #include 
2 using namespace std; 3 4 5 enum error{rangeerror,overflow,underflow,success}; 6 struct node{ 7 int data; 8 node *next; 9 }; 10 11 class list{ 12 public: 13 list(); 14 int length() const;//求长度的函数 15 // ~list();//释放链表存储空间的析构函数 16 int get_int(const int i ,int & x)const;//按序号取元素运算函数 17 int locate(const int x)const;//搜索元素运算对应的函数 18 int insert(const int i,const int x);//插入元素运算对应的函数 19 int dele(const int i);//删除元素对应的函数] 20 void create();//创建链表 21 node *get_head(){
return head;} 22 bool Judge();//判断链表L中的元素是否为递增的 23 void copy(list A,list &B);//复制链表A中的内容到B表中 24 private: 25 int count; 26 node * head; 27 }; 28 29 30 list::list(){
//初始化对应的构造函数 31 head =new node; 32 head->next=NULL; 33 count=0; 34 } 35 36 int list::length() const{
//求长度 37 return count; 38 } 39 40 int list::get_int(const int i,int &x)const{
//按序号取元素 41 node *p=new node; 42 p=head->next; 43 int j=1; 44 while(p!=NULL&&j!=i){
//当前节点不是目标节点,并且不空时就继续搜索 45 p=p->next; 46 j++; 47 } 48 if(p==NULL)return rangeerror; 49 else { 50 x=p->data; 51 return success; 52 } 53 } 54 55 int list::locate(const int x)const{
//搜索元素运算对应的函数 56 bool flags=false; 57 int j=1; 58 node *p = new node; 59 while(p!=NULL){ 60 if(p->data==x){ 61 cout<<"元素所在的位置为:"<
<
next; 67 } 68 } 69 if(flags==false)return -1; 70 return 0; 71 } 72 73 74 int list::insert(const int i,const int x){
//插入元素 75 node *p=new node; 76 p=head; 77 int j; 78 j=0; 79 while(j!=i-1&&p!=NULL){ 80 p=p->next; 81 j++; 82 } 83 84 if(i<1||i>count+1)return rangeerror; 85 node *s = new node;//产生节点 86 s->data=x;//装入数据 87 s->next=p->next; 88 p->next=s; 89 count++; 90 return success; 91 } 92 93 94 int list::dele(const int i){
//删除元素 95 node * p=new node; 96 p=head; 97 int j=0; 98 while(j!=i-1&&p!=NULL){ 99 p=p->next;100 j++;101 }102 103 if(i<1||i>count+1)return rangeerror;104 node *u=new node;105 u=p->next;106 p->next=u->next;107 delete u;108 count--;109 return success;110 }111 112 113 void list::create(){
//创建链表114 int x;115 cin>>x;116 node * rear=head;117 while(x!=0){118 count++;119 node *s=new node;120 s->data=x;121 rear->next=s;122 rear=s;123 rear->next=NULL;124 cin>>x;125 }126 }127 128 bool list::Judge(){
//用于判断链表是否为递增的129 node *p=new node;130 p=head;131 bool flags=true;132 while(p->next!=NULL){133 if(p->data
next->data)p=p->next;134 else {135 flags=false;136 break;137 }138 }139 return flags;140 }141 142 void list::copy(list A,list &B){143 node *pa=new node;144 node *pb=new node;145 pa=A.get_head()->next;146 pb=head;147 while(pa!=NULL){148 node * s = new node;149 s->data=pa->data;150 pb->next=s;151 pb=s;152 B.count++;153 pa=pa->next;154 pb->next=NULL;155 }156 }157 int main()158 {159 list l;160 l.create();161 int i,x;162 for(i=0;i

 

转载于:https://www.cnblogs.com/minmsy/p/5022056.html

你可能感兴趣的文章
linux常用命令
查看>>
10.Java异常问题
查看>>
希迪智驾自动驾驶落地新思路:V2X + L4级自动驾驶货车,“落地”才是要务
查看>>
利用Git Webhooks实现jekyll博客自动化部署
查看>>
Fescar undoExecutor介绍
查看>>
Linux命令操作大全
查看>>
从周五开始香港主机特别慢,香港主机用户有同感吗?
查看>>
VAVA宠物机器人来了,可实现远程互动以及自动投食
查看>>
使用VMware安装CentOS7详请
查看>>
Ember.js 3.9.0-beta.3 发布,JavaScript Web 应用开发框架
查看>>
python标准库00 学习准备
查看>>
4.2. PHP crypt()
查看>>
Winform开发框架之附件管理应用
查看>>
软链接文件和硬链接文件
查看>>
Spring Cloud Config服务器
查看>>
commonservice-config配置服务搭建
查看>>
连接池的意义及阿里Druid
查看>>
ComponentOne 2019V1火热来袭!全面支持 Visual Studio 2019——亮点之WinForm篇
查看>>
全面的Spring Boot配置文件详解
查看>>
如何优雅地玩转分库分表
查看>>