c语言实现关于顺序表的综合操作(创建、排序、查找、插入、删除、修改等操作)

关于线性表的综合操作

顺序表


@[TOC](文章目录)

前言

综合掌握顺序表的创建、排序、查找、插入、删除、修改等操作。


1. 基于顺序存储结构的图书信息表的创建和输出

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。
输入
输入 n+1 行,其中前 n 行是 n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第 n+1 行是输入结束标志:0 0 0(空格分隔的三个 0)。其中书号和书名为字符串类型,价格为浮点数类型。
输出
总计 n+1 行,第 1 行是所创建的图书表中的图书个数,后 n 行是 n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输入样例
9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第 2 版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00
0 0 0

输出样例
6
9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第 2 版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00

代码如下:

#define OK 1
#define ERROR 0
typedef int Status;
typedef struct {
	char no[20];               //图书ISBN
	char name[50];             //图书名字
	float price;               //图书价格
}Book;
typedef struct {
	Book* elem;                //存储空间的基地址
	int length;                //图书表中当前图书个数
}SqList;                       //图书馆的顺序存储结构类型为SqList
typedef Book Elemtype;
Status InitList(SqList* L) {
	//L->elem = (Elemtype*)malloc(sizeof(Elemtype)*MAXSIZE);
	L->elem = new Book[MAXSIZE];
	//malloc的返回值是一个指针,指向一段可用内存的起始地址
	if (!L->elem)
		exit(-2);
	L->length = 0;
	return OK;
}

int main() {
	int i;
	SqList L;
	InitList(&L);
	Book b[MAXSIZE];
	for (i = 0; i < MAXSIZE; i++) {
		scanf("%s %s %f", &b[i].no, &b[i].name, &b[i].price);
		if (!strcmp(b[i].no, "0") && !strcmp(b[i].name, "0") && (b[i].price == 0)) break;
	}
	printf("%d\n", i );
	for (int j = 0; j < i; j++) {
		printf("%s %s %.2f\n", b[j].no, b[j].name, b[j].price);
	}
}

2. 基于顺序存储结构的图书信息表的排序
代码如下
需注意 下面这个函数的实现是采用的另一种插入方法,意在让同学们了解排序的实质 从而可以自己独立的进行编写程序

void SortTable(SqList*T){
    for(int i=0;i<T->length;++i){
        for(int j=i+1;j<T->length;++j){
            if(T->date[i].price<T->date[j].price){
                Book temp;
                temp=T->date[i];
                T->date[i]=T->date[j];
                T->date[j]=temp;
            }
        }
    }
}

3. 基于顺序存储结构的图书信息表的修改

注意该函数的实现要先把握对顺序表的遍历,通过遍历的方法实现对价格的求和 从而将average作为条件来进行价格的变动

void ChangePrice(SqList *T){
    float sum=0;
    for(int i=0;i<T->length;++i){
        sum+=T->date[i].price;
    }
    float average = sum/T->length;
    printf("%.2f\n",average);
    for(int i=0;i<T->length;++i){
        if(T->date[i].price>=average){
            T->date[i].price*=1.1;
        }else{
            T->date[i].price*=1.2;
        }
    }
}

4.基于顺序存储结构的图书信息表的新图书的入库与出库
插入和删除是类似的在这里我们一起说,有新的同学看到下面代码也可以发现,我写的删除是直接把插入的拿过来直接修改的
在插入和删除里面我们最关心的是要操作节点的前一个元素通过输入的n,我们确定好所操作节点的前一个节点的位置,剩下的插入无非就是将插入位置及之后的元素右移,将要插入的元素插入到已经空出的位置。同理删除某个节点的操作就比插入更简单,就是直接将所删除元素及以后的元素统一向前覆盖即可(注意覆盖的方向)

Status ListInsert(SqList& L, int i, Elemtype e) {
	//在顺序表L中第i个位置之前插入新的元素e,i值的合法范围是1<=i<=L.length+1
	if ((i < 1) || (i > L.length + 1)) return ERROR;//i值不合法
	if (L.length == MAXSIZE) return ERROR;//当前存储空间已满
	for (int j = L.length - 1; j >= i - 1; j--) {
		L.elem[j + 1] = L.elem[j];//插入位置及之后的元素右移
	}
	L.elem[i - 1] = e;//将新元素e放入第i个位置
	++L.length;//表长加1
	return OK;
}
Status ListDelete(SqList& L, int i) {
	if ((i < 1) || (i > L.length + 1)) return ERROR;//i值不合法
	//if (L.length == MAXSIZE) return ERROR;//当前存储空间已满
	for (int j = i-1; j <= L.length-1; j++) {
		L.elem[j] = L.elem[j+1];//删除位置及之后的元素左移
	}
	//L.elem[i - 1] = e;
	--L.length;//表长-1
	return OK;
}

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

越狱兔崽子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值