#include<iostream.h> 头文件;

#include<iostream.h>
#define MAX 1024
typedef int Elemtype;
typedef struct
{
int *elem;
int length;
}Sqlist; void Initlist(Sqlist &L)
{
L.elem=new int[MAX];
if(L.elem==NULL)
return;
else
L.length=;
} void createlist(Sqlist &L)
{
cin>>L.length;
for(int i=;i<L.length;i++)
cin>>L.elem[i];
} void printlist(Sqlist L)
{
for(int i=;i<L.length;i++)
cout<<L.elem[i]<<'\t';
} int emptylist(Sqlist L)
{
if(L.length==)
return ;
else
return ;
} int queryelem(Sqlist L,Elemtype e)
{
for(int i=;i<L.length;i++)
if(L.elem[i]==e)
return i+;
return ;
} void getelem(Sqlist L,int i,int &e)
{
if(i< || i>L.length)
return;
else
e=L.elem[i-];
} void insertelem(Sqlist &L,int i,int e)
{
if(i< || i>L.length+)
return;
else
for(int k=L.length-;k>i-;k--)
L.elem[k+]=L.elem[k];
L.elem[i-]=e;
L.length ++;
} void main()
{
Sqlist L;
Initlist(L);
createlist(L);
printlist(L);
int null;
null=emptylist(L);
if(null==)
cout<<"it is nulllist";
else
cout<<" \nit is not nulllist";
int e;
cout<<"\nput on query elem";
cin>>e;
int i;
i=queryelem(L,e);
if(i!=)
cout<<i;
cout<<"\n put on di ji ge elem";
cin>>i;
getelem(L,i,e);
cout<<e;
cout<<"put on insert elem and locate";
cin>>i>>e;
insertelem(L,i,e);
printlist(L);
}

#define MAX 1024 宏定义
typedef int Elemtype; typedef                                     (取一个别名), int的别名就是Elemtype。
typedef struct                   定义一个结构体,这个结构体的名字叫做SqList;这个SqList的结构体中有整型的*elem,整型的length
{
Elemtype *elem;
int length;
}SqList;
void InitList(SqList &L)                初始化函数来初始我定义的SqList &L这个结构体的变量,注意加&是改变L这个结构体变量的数据。
{
L.elem=new Elemtype[MAX];              通过new函数 申请一个整型的数组,将这个数组赋予给L.elem这个指针,L.elem是调用这个elem这个整型指针。
if(L.elem==NULL)                  如果这个空间为空的话,则不带返回值的return语句只能用于返回类型为void的函数,return语句是为了引起函数的强制结束,
                      这种用法类似于循环结构中的break语句的作用。new函数申请整型数组赋予结构体当中的指针。为什么要赋予给指针,因为

                      在c++中,数组其实指针来解释的。    
return ;                   判断开辟空间成功还是失败,失败是NULL,直接退出。成功为0
else
L.length=0;                 否则就是有空间,但是这个空间还没有数据,所以他的长度为0. 有空间就相当于开辟了一个长方形。
}

void creat_list(SqList &L)            创建一个有数据的线性表的函数。
{
cin>>L.length;               输入这个线性表的长度,例如你输入5,代表在这个长方形中划4条竖线,不就有5个格子呢。5个格子还没有数据对不对啊?
for(int i=0;i<L.length;i++)           所以我们就需要用for循环来为这5个格子填写你想要的数据,不就行了。for循环输入每个具体的数据
cin>>L.elem[i];                电脑出现让你输5次。你就输呗。
}
void print(SqList L)              创建一个打印函数。结构体Sqlist定义的L为什么没有像以前那样加&号,是因为打印函数根本没有改变L的数据啊
{
for(int i=0;i<L.length;i++)            打印不就循环小于你输入这个线性表的长度。  直接用for循环遍历即可打印。
cout<<L.elem[i]<<'\t';             输出你打印的就行了。  打印好看点,打印的就不会挤在一起呢。\t相当于tab制表符的缩写,跳过四个空格;
}
int IsEmpty(SqList L)              判断这个线性表是否为空的话,
{
if(L.length==0)                 如果是1的话就为真。   其实就是判断线性表的长度是否为0;
return 1;
else
return 0;                    否则就为假呗。
}
void Getelem(SqList L,int i,Elemtype &e)       获取L中的第i个元素。第i个元素是就信息世界而言的,是对人类好理解的,对程序而言的话。第i个元素的是
                          第i-1个元素。知道获取的范围;
{
if(i<1||i>L.length)                  刁难一下,获取的不在这个线性表的长度范围之内。
return;
else
e=L.elem[i-1];                 如果在的话,就把这个第i个元素的值赋给e呗。 线性表中的第几个元素对应的值都是固定的,因此根本就不必要想遍历。
}
int Locatelem(SqList L,Elemtype e)          这个函数就是判断这个线性表中的数据e是在第几个位置。Locatelem就是干这活的。
{
for(int i=0;i<L.length;i++)//n              首先遍历我这个线性表L中的所有数据,遍历最好用的当然是for循环呢。遍历这个线性表只要小于这个线性表的
                         长度即可         查询一个元素的位置当然第一步就是遍历所有的元素,看是否有符合条件的,
if(L.elem[i]==e) //n T(n)=O(n) T(n)=O(1)         遍历一个,判断一个,看他是否是在第e个位置。
return i+1;                      是的话,放回一个i+1,为什么是i+1呢,因为对程序而言,他想的第一个是第从0开始,而我们人类想的第一个
                          是从第1开始的,所以这个变成了i+1,而不是i呢。
return 0;                       如果全部遍历完了之后,都没有找到数据e,就返回0呢呗。
}
void InsertList(SqList &L,int i,Elemtype e)        这个一个插入函数,就是在第i个插入e这个元素。
{
if(i<1||i>L.length+1)                刁难一下,就是如果i<1的话和i>这个长度加1的话,为什么这个长度要加1呢,因为大于线性表的长度是可以,如
                        线性表的长度是5,大于5,也就是第6个,在第6个插入元素e,是完全ok的啦。  判断插入的是否在这个范围?
cout<<"位置不合理\n";
else
if(L.length>=MAX)               相当于把这张纸开辟出的长方形已经占满呢,无法再开辟呢,说明就无法再插入呢,所以表就已满呢
cout<<"表已满\n";
else
{
for(int j=L.length-1;j>=i-1;j--)             首先我肯定是遍历后三个手指,也就是第i之后的元素。     插入肯定要遍历呢。遍历后向后挪一位。空的位置赋予新值
L.elem[j+1]=L.elem[j];                 然后把三个手指往后挪一位就可以。就在第i处空出一个位置呢。 表自增。
L.elem[i-1]=e;                   然后把空出的位置给e即可
L.length++;                   在把整个线性表的长度加1即可。
}
}
void main()                   主函数的定义
{
SqList L;                      结构体sqlist定义一个名为L的线性表。
InitList(L);                      通过初始化函数初始这个线性表。就是给这个线性表开辟一个空间,相当于给一张纸开辟出一个长方形。
creat_list(L);                    创建一个有数据的线性表,相当于给这张纸画4条竖线。
print(L);                        打印这个线性表
int len;
len=IsEmpty(L);
if(len==1)
cout<<"空表";
else
{
cout<<"非空";
}
int i;
cout<<"\n请输入查找的位置:";
cin>>i;
Elemtype e;
Getelem(L,i,e);                     获取线性表中第i个元素,并将第i个元素的值赋予e
cout<<e<<endl;
cout<<"\n请输入查找的元素的值:";
cin>>e;
i=Locatelem(L,e);                      查找线性表中e这个元素是在线性表中排第几个。
if(i!=0)
cout<<i<<endl;
cout<<"\n请输入插入的位置和元素的值:";
cin>>i>>e;
InsertList(L,i, e);                        在线性表L中的第i处插入名为e的元素。
print(L);

}

数据结构默写代码:

 #include<iostream.h>
#define MAX 1024
typedef int Elemtype;
typedef struct
{
Elemtype *elem;
int length;
}Sqlist; void Initlist(Sqlist &L)
{
L.elem=new Elemtype[MAX];
if(L.elem==NULL)
return;
else
L.length=;
} void createlist(Sqlist &L)
{
cin>>L.length;
for(int i=;i<L.length;i++)
cin>>L.elem[i];
} void printlist(Sqlist L)
{
for(int i=;i<L.length;i++)
cout<<L.elem[i]<<'\t';
} int emptylist(Sqlist L)
{
if(L.length==)
return ;
else
return ;
} void getelem(Sqlist L,int i,int &e)
{
if(i<||i>L.length)
return;
else
e=L.elem[i-];
} void insertelem(Sqlist &L,int i,int e)
{
if(i< || i>L.length+)
return;
else
for(int k=L.length-;k>=i-;k--) 为什么k=L.length-1呢,因为他想第5个手指,对程序而言,其实就是4,0是第一个。把4往后挪一位,变成5。
L.elem[k+]=L.elem[k];         
L.elem[i-]=e;
L.length ++;
} int locateelem(Sqlist L,int e)
{
for(int i=;i<L.length;i++)
if(L.elem[i]==e)
return i+;
return ;
}
void main()
{
Sqlist L;
Initlist(L);
createlist(L);
printlist(L);
int null;
null=emptylist(L);
if(null==)
cout<<"it is nulllist";
else
cout<<"it is not nulllist"<<"\n";
int i;
cout<<"put on locate"<<'\t';
cin>>i;
int e;
getelem(L,i,e);
cout<<e;
cout<<"\nput on your insert elem locate and elem value";
cin>>i>>e;
insertelem(L,i,e);
printlist(L);
cout<<"\nput on your query elem";
cin>>e;
i=locateelem(L,e);
if(i!=)
cout<<i<<endl; }

void deleteelem(Sqlist &L,int i)
{
if(i<1 || i>L.length+1)
return;
else
for(int k=i;k<=L.length-1;k++)
L.elem[k-1]=L.elem[k];
L.length --;
}

最新文章

  1. 使用原生ajax访问后台数据并将其展现在前端页面中(小菜鸟自己整理玩的,大神勿喷)
  2. Docker SSH+NGHINX+MYSQL
  3. php部分--题目:投票
  4. IIS7 “拒绝访问临时目录”
  5. ubuntu中mysql修改编码utf8
  6. 【笔记】BFC 模型知识整理
  7. Spring Boot 定时任务的使用
  8. 资产信息之收集资产代码流程,API的一个认证,数据库表的设计
  9. Solidity知识点集 — 溢出和下溢
  10. 网上看到一份详细sql游标说明 《转载 https://www.cnblogs.com/xiongzaiqiren/p/sql-cursor.html》
  11. 3D转换(位置)+过渡+透视
  12. [solution] JZOJ 5459. 密室
  13. MarkDown常用语法及word转MarkDown
  14. Fluent动网格【3】:DEFINE_CG_MOTION宏
  15. python 冷知识
  16. 84. Largest Rectangle in Histogram *HARD* -- 柱状图求最大面积 85. Maximal Rectangle *HARD* -- 求01矩阵中的最大矩形
  17. PHP-各种下载安装
  18. GridControl详解(三)列数据的格式设置
  19. hadoop参数(未完).md
  20. OSG3.2+Qt5.2.1+VS2012+OSGEarth 2.5编译问题记录

热门文章

  1. 在eclipse上搭建springBoot
  2. 数据字典的设计--3.首页添加删除表格(JS实现)
  3. cms-详细页面-3
  4. linux 命令——6 rmdir(转)
  5. JavaScript: apply , call 方法
  6. 【HHHOJ】NOIP模拟赛 捌 解题报告
  7. DOM4j-中文API
  8. quartz调度
  9. 51nod——1640 天气晴朗的魔法 有边权限制的最大生成树
  10. python之质数