【顺序表的应用】(C语言)

一、问题描述

智能家居系统创建一个家居环境参数表,包含“日期、时间、地点、温度、湿度”等信息。程序能够完成如下功能:

(1) 能够逐条输入信息,创建表;

(2) 能够显示表中的所有信息;

(3) 根据时间和地点进行查找,返回相关参数信息;

(4) 给定一条环境参数信息,按照日期和时间顺序插入到表中指定的位置;

(5) 删除指定日期的记录;

二、算法设计

序号

名称

函数表示符

操作说明

1

顺序表初始化

InitList

初始化一个顺序表

2

顺序表创建

ListCreate

可以输入信息

3

顺序表查找

Locate

按照时间和地点查找

4

顺序表插入

ListInsert

在指定位置插入顺序表

5

顺序表删除

ListDelete

删除指定位置的顺序表

6

主函数

Main

主函数

 三、代码实现

#include<stdlib.h>
#include<iostream>
#include<string.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef struct//定义一个message的信息表
{
	char date[20];
	char time[20];
	char place[20];
	int temp;
	int hum;
}message;
typedef struct//定义一个顺序表
{
	message *p;
	int length;
}SqList;

//能够逐条输入信息,创建表
int InitList(SqList &L)//初始化
{
	L.p=new message[MAXSIZE];//分配存储空间
	if(!L.p)
		exit(OVERFLOW);
	L.length=0;//空表长度为0
	return OK;
}
int ListCreate(SqList &L,int j,message e)//输入信息
{
	if(j<0||j>MAXSIZE)
		return ERROR;
	if(L.length==MAXSIZE)
		return OVERFLOW;
	strcpy(L.p[j].date,e.date);
	strcpy(L.p[j].time,e.time);
	strcpy(L.p[j].place,e.place);
	L.p[j].temp=e.temp;
	L.p[j].hum=e.hum;
	L.length++;
	return OK;
}
int Locate(SqList L,char e[],char f[])//按时间和地点查找
{
	int i;
	for(i=0;i<L.length;i++)
	{
		if(strcmp(L.p[i].time,e)==0&&strcmp(L.p[i].place,f)==0)
		{
			cout<<"第"<<i+1<<"个信息的日期是"<<L.p[i].date<<",时间是"<<L.p[i].time<<",地点是"<<L.p[i].place<<",温度是"<<L.p[i].temp<<",湿度是"<<L.p[i].hum<<endl;
			return OK;
		}
	}
	return ERROR;
	cout<<"对不起,没找到";
}
int ListInsert(SqList &L,int i,message e)//插入一条信息
{
	int j;
	if((i<1)||(i>L.length+1))
		return ERROR;
	if(L.length==MAXSIZE)
		return ERROR;
	for(j=L.length-1;j>=i-1;j--)//插入位置及以后的元素后移
	{
		strcpy(L.p[j+1].date,L.p[j].date);
		strcpy(L.p[j+1].time,L.p[j].time);
		strcpy(L.p[j+1].place,L.p[j].place);
		L.p[j+1].temp=L.p[j].temp;
		L.p[j+1].hum=L.p[j].hum;
	}
	//将新的元素插到第i个位置去
	strcpy(L.p[i-1].date,e.date);
	strcpy(L.p[i-1].time,e.time);
	strcpy(L.p[i-1].place,e.place);
	L.p[i-1].temp=e.temp;
	L.p[i-1].hum=e.hum;
	++L.length;
	return OK;
}
int ListDelete(SqList &L,int i)//删除一条信息
{
	int j;
	if((i<1)||(i>L.length))
		return ERROR;
	for(j=i;j<=L.length-1;j++)//被删除之后的元素前移
	{
		strcpy(L.p[j-1].date,L.p[j].date);
		strcpy(L.p[j-1].time,L.p[j].time);
		strcpy(L.p[j-1].place,L.p[j].place);
		L.p[j-1].temp=L.p[j].temp;
		L.p[j-1].hum=L.p[j].hum;
	}
	--L.length;
	return OK;
}
int main()
{
	cout << "欢迎来到南南的顺序表!" << endl;
	int i,n,k,x;
	message e,g;
	SqList L;
	InitList(L);
	char str[20];
	char strr[20];
	cout<<"请输入要创建的表的个数:";
	cin>>n;
	for(i=0;i<n;i++)
	{
		cout<<"第"<<i+1<<"个信息的日期是";
		cin>>e.date;
		cout<<"第"<<i+1<<"个信息的时间是";
		cin>>e.time;
		cout<<"第"<<i+1<<"个信息的地点是";
		cin>>e.place;
		cout<<"第"<<i+1<<"个信息的温度是";
		cin>>e.temp;
		cout<<"第"<<i+1<<"个信息的湿度是";
		cin>>e.hum;
		ListCreate(L,i,e);
	}
	for(i=0;i<n;i++)
	{
		cout<<"第"<<i+1<<"个信息的日期是"<<L.p[i].date<<",时间是"<<L.p[i].time<<",地点是"<<L.p[i].place<<",温度是"<<L.p[i].temp<<",湿度是"<<L.p[i].hum<<endl;
	}
	cout<<"请输入待查找的时间和地点:"<<endl;
	cin>>str>>strr;
	Locate(L,str,strr);
	cout<<"请输入待插入的信息"<<endl;
	cout<<"待插入信息的位置是";
	cin>>k;
	cout<<"待插入信息的日期是";
	cin>>g.date;
	cout<<"待插入信息的时间是";
	cin>>g.time;
	cout<<"待插入信息的地点是";
	cin>>g.place;
	cout<<"待插入信息的温度是";
	cin>>g.temp;
	cout<<"待插入信息的湿度是";
	cin>>g.hum;
	ListInsert(L,k,g);
	cout<<"插入操作后的所有的信息如下:"<<endl;
	for(i=0;i<L.length;i++)
	{
		cout<<"第"<<i+1<<"个信息的日期是"<<L.p[i].date<<",时间是"<<L.p[i].time<<",地点是"<<L.p[i].place<<",温度是"<<L.p[i].temp<<",湿度是"<<L.p[i].hum<<endl;
	}
	cout<<"请输入删除的位序";
	cin>>x;
	ListDelete(L,x);
	cout<<"删除操作后的所有的信息如下:"<<endl;
	for(i=0;i<L.length;i++)
	{
		cout<<"第"<<i+1<<"个信息的日期是"<<L.p[i].date<<",时间是"<<L.p[i].time<<",地点是"<<L.p[i].place<<",温度是"<<L.p[i].temp<<",湿度是"<<L.p[i].hum<<endl;
	}
	return 0;
}

四、运行说明

 

 

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
顺序表是一种基于数组实现的线性表,它的应用非常广泛。以下是一个简单的顺序表应用代码实现(C语言): ```c #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 // 最大元素个数 typedef struct { int data[MAXSIZE]; // 存储数据的数组 int length; // 当前元素个数 } SqList; // 初始化顺序表 void initList(SqList *L) { L->length = 0; } // 插入元素 int insertList(SqList *L, int i, int e) { if (i < 1 || i > L->length + 1 || L->length == MAXSIZE) { // 插入位置不合法或表满 return 0; } for (int j = L->length; j >= i; j--) { L->data[j] = L->data[j - 1]; // 将元素后移 } L->data[i - 1] = e; // 插入新元素 L->length++; // 元素个数加一 return 1; } // 删除元素 int deleteList(SqList *L, int i) { if (i < 1 || i > L->length) { // 删除位置不合法 return 0; } for (int j = i; j < L->length; j++) { L->data[j - 1] = L->data[j]; // 将元素前移 } L->length--; // 元素个数减一 return 1; } // 查找元素 int searchList(SqList *L, int e) { for (int i = 0; i < L->length; i++) { if (L->data[i] == e) { return i + 1; } } return 0; // 没有找到 } // 输出顺序表 void printList(SqList *L) { for (int i = 0; i < L->length; i++) { printf("%d ", L->data[i]); } printf("\n"); } int main() { SqList L; initList(&L); // 初始化顺序表 insertList(&L, 1, 10); // 在第1个位置插入元素10 insertList(&L, 2, 20); // 在第2个位置插入元素20 insertList(&L, 3, 30); // 在第3个位置插入元素30 printList(&L); // 输出顺序表:10 20 30 deleteList(&L, 2); // 删除第2个元素 printList(&L); // 输出顺序表:10 30 int pos = searchList(&L, 30); // 查找元素30的位置 if (pos > 0) { printf("元素30的位置是:%d\n", pos); // 输出:元素30的位置是:2 } else { printf("没有找到元素30!\n"); } return 0; } ``` 这段代码实现了顺序表的基本操作,包括初始化、插入、删除、查找和输出。可以根据需要对代码进行修改和扩展,实现更复杂的应用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追梦少年南南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值