⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 线性表的顺序存储结构.txt

📁 线性表的链式存储结构、线性表的顺序存储结构、循环链表等源程序。
💻 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 + -