📄 线性表的顺序存储结构.txt
字号:
#include"stdio.h"
#include"stdlib.h"
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct lnode{
float *data;
int length;//线性表的总长度
int listsize;//记录线性表的当前长度
}sqlist;
void initlist(sqlist &l){
l.data=(float *)malloc(LIST_INIT_SIZE*sizeof(float));
l.length=LIST_INIT_SIZE;
l.listsize=0;
}//对线性表进行初始化
void destroylist(sqlist &l){
free(l.data);
l.length=0;
l.listsize=0;
}//毁灭表
void creatlist(sqlist &l){
int i;
printf("有多少个数据需要输入:");
scanf("%d",&l.listsize);
printf("请输入数据元素(数据之间以空格隔开):");
for(i=0;i<l.listsize;i++)
scanf("%f",l.data+i);
}//创建表
void clearlist(sqlist &l){
l.listsize=0;
}//清空表
bool listempty(sqlist &l){
if(l.listsize==0)
return true;
else
return false;
}//判断表是否为空,如果为空则返回true,如果非空,则返回false
int listlength(sqlist &l){
return l.listsize;
}//求表的当前长度
float getelem(sqlist l,int i,float e){
e=*(l.data+i-1);
return e;
}//获取表中的第i个元素,并保存到e中返回
void listinsert(sqlist &l,int i,float e){
int k;//循环控制变量
if(i<1||i>l.listsize+1){
printf("请确定您输入的位置是否有效?");
exit(0);
}
else{
if(i==l.listsize+1){
*(l.data+l.listsize)=e;
l.listsize++;
}
else{
for(k=l.listsize-1;k>=i-1;k--)
*(l.data+k+1)=*(l.data+k);
*(l.data+i-1)=e;
l.listsize++;
}
}
}//将数据元素插入到顺序表中第i个元素的前面
void listdelete(sqlist &l,int i,float e){
int k;//循环控制变量
if(!(i>0&&i<=l.listsize)){
printf("请确定您输入的数据位置是否有效?");
exit(0);
}
else{
e=*(l.data+i-1);
for(k=l.listsize-2;k>=i-1;k--)
*(l.data+k)=*(l.data+k+1);
l.listsize--;
}
}//删除表l中的第i个元素
void mergelist(sqlist l,sqlist p,sqlist &m){
int i=0;//记录表l的下标
int j=0;//记录标p的下标
int k=1;//用来对表m的下标进行记录
initlist(m);
while(i<listlength(l)&&j<listlength(p)){
if(*(l.data+i)<*(p.data+j)){
listinsert(m,k++,*(l.data+i));
i++;
}
else{
listinsert(m,k++,*(p.data+j));
j++;
}
}
while(i<listlength(l)){
listinsert(m,k++,*(l.data+i));
i++;
}
while(j<listlength(p)){
listinsert(m,k++,*(p.data+j));
j++;
}
m.listsize=l.listsize+p.listsize;
destroylist(l);
destroylist(p);
}//实现两顺序表的合并
void main(){
sqlist l,p,m;//其中l和p是由用户输入而产生的表,m是一个新表,用来保存两顺序表合并之后的结果
int i;
initlist(l);
initlist(p);
creatlist(l);
creatlist(p);
mergelist(l,p,m);
printf("合并以后表为:\n");
for(i=0;i<m.listsize;i++){
printf("%6.2f\n",*(m.data+i));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -