2021-08-24

数据结构学习(C语言)–顺序表的基本操作

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//定义结构体
struct Sqlist {
	int len;//定义数组最大长度
	int eNum;//定义有效数据个数
	int * pdata;//数组的第一个元素的地址
};
//函数声明部分
void initSqList(struct Sqlist * psqlist,int length);//申请空间
void showSqList(struct Sqlist * psqlist);//输出顺序表
bool append(struct Sqlist * psqlist,int val);//末尾追加
bool isFull(struct Sqlist * psqlist);//判断是否已满
bool isEmpty(struct Sqlist * psqlist);//判断是否为空
bool insert(struct Sqlist * psqlist,int pos, int val);//按位置(1开始)插入
bool deleteIndex(struct Sqlist * psqlist, int pos,int *pval);//按位置(第几个)删除一个元素
bool deleteValue(struct Sqlist * psqlist,int val);//删除特定的元素
bool serchIndex(struct Sqlist * psqlist,int pos,int * pval);//查询指定位置的元素
bool serchValue(struct Sqlist * psqlist,int val,int * pindex);//查询指定元素的位置(第一个)
bool modifyByPos(struct Sqlist * psqlist,int pos,int val);//修改指定位置的元素
void invert(struct Sqlist * psqlist);//倒置顺序表元素
void sortBubbling(struct Sqlist * psqlist);//冒泡排序
//主函数部分
int main(void) {
	struct Sqlist sqlist;
	int val;  //用来指定元素值
	int index;//用来指定元素下标
	initSqList(&sqlist, 10);
	append(&sqlist, 2);
	append(&sqlist, 5);
	append(&sqlist, 8);
	printf_s("以追加的方式,添加2,5,8, 结果为:\n");
	showSqList(&sqlist);
	printf_s("以插入的方式,位置2添加15, 结果为:\n");
	insert(&sqlist,2,15);
	showSqList(&sqlist);
	printf_s("以插入的方式,位置6添加12, 结果为(错误测试!):\n");
	insert(&sqlist, 6, 12);
	showSqList(&sqlist);
	printf_s("删除第三个元素,结果为:\n");
	deleteIndex(&sqlist,3,&val);
	showSqList(&sqlist);
	printf_s("删除值为15的元素,结果为:\n");
	deleteValue(&sqlist, 15);
	showSqList(&sqlist);
	printf_s("补充几个元素,结果为:\n");
	append(&sqlist, 10);
	append(&sqlist, 9);
	append(&sqlist, 22);
	append(&sqlist, 3);
	append(&sqlist, 19);
	showSqList(&sqlist);
	printf_s("查询第5个元素的值:\n");
	serchIndex(&sqlist,5,&val);
	printf_s("第五个元素的值为:%d\n", val);
	printf_s("查询值为22的元素的位置(下标):\n");
	serchValue(&sqlist,22, &index);
	printf_s("将第一个元素改成11:\n");
	modifyByPos(&sqlist, 1, 11);
	showSqList(&sqlist);
	printf_s("冒泡排序:\n");
	sortBubbling(&sqlist);
	showSqList(&sqlist);
	return 0;
}
//函数实现部分
void initSqList(struct Sqlist * psqlist, int length) {//申请空间
	psqlist->pdata = (int *)malloc(sizeof(int)*length);
	if (psqlist == NULL) {
		printf_s("动态分配空间失败!\n");
		exit(-1);
	}
	else {
		psqlist->len = length;
		psqlist->eNum = 0;
	}
}
bool isFull(struct Sqlist * psqlist) {//判断是否已满
	if (psqlist->eNum == psqlist->len) {
		return true;
	}
	return false;
}
bool isEmpty(struct Sqlist * psqlist) {//判断是否为空
	if (psqlist->eNum == 0)
		return true;
	return false;
}
bool append(struct Sqlist * psqlist, int val) {//末尾追加
	if (isFull(psqlist)){
		printf_s("顺序表已满!\n");
		return false;
	}
	else {
		psqlist->pdata[psqlist->eNum] = val;
		printf_s("追加%d成功!\n",val);
		psqlist->eNum++;
		return true;
	}
}
void showSqList(struct Sqlist * psqlist) {//输出顺序表
	if (isEmpty(psqlist)) {
		printf_s("顺序表为空!\n");
	}
	else {
		for (int i = 0; i < psqlist->eNum; i++) {
			printf_s("%d   ", psqlist->pdata[i]);
		}
		putchar('\n');
	}
}
bool insert(struct Sqlist * psqlist, int pos, int val) {//按位置(1开始)插入
	if (pos<1 || pos>(psqlist->eNum) + 1){
		printf_s("插入位置不合法!\n");
		return false;
	}
	if (isFull(psqlist)) {
		printf_s("空间已满!\n");
		return false;
	}
	for (int i = (psqlist->eNum) - 1; i >= pos - 1; i--) {
		psqlist->pdata[i+1] = psqlist->pdata[i];
	}
	psqlist->pdata[pos - 1] = val;
	psqlist->eNum++;
	return true;
}
bool deleteIndex(struct Sqlist * psqlist,int pos,int * pval) {//按位置(第几个)删除一个元素
	if (isEmpty(psqlist)) {
		printf_s("顺序表为空!\n");
		return false;
	}
	if (pos<1 || pos>psqlist->eNum) {
		printf_s("删除位置不合法!\n");
		return false;
	}
	*pval = psqlist->pdata[pos- 1];
	for (int i = pos; i < (psqlist->eNum); i++) {
		psqlist->pdata[i - 1] = psqlist->pdata[i];
	}
	printf_s("已将第%d个元素%d删除\n",pos,*pval);
	psqlist->eNum--;
	return true;
}
bool deleteValue(struct Sqlist * psqlist, int val) {//删除特定的元素
	if (isEmpty(psqlist)) {
		printf_s("顺序表为空!\n");
		return false;
	}
	int posi;
	for (int i = 0; i < psqlist->eNum; i++) {
		if (psqlist->pdata[i] == val) {
			posi = i;
		}
	}
	for (int j = posi + 1; j < psqlist->eNum; j++) {
		psqlist->pdata[j-1] = psqlist->pdata[j];
	}
	printf_s("已将元素%d删除\n" ,val);
	psqlist->eNum--;
	return true;
}
bool serchIndex(struct Sqlist * psqlist, int pos,int * pval) {//查询指定位置的元素
	if (isEmpty(psqlist)) {
		printf_s("顺序表为空!\n");
		return false;
	}
	if (pos<1 || pos>psqlist->eNum) {
		printf_s("查询位置不合法!\n");
		return false;
	}
	*pval = psqlist->pdata[pos - 1];
	return true;
}
bool serchValue(struct Sqlist * psqlist, int val, int * pindex) {//查询指定元素的位置(第一个)
	if (isEmpty(psqlist)) {
		printf_s("顺序表为空!\n");
		return false;
	}
	int i;
	for (i = 0; i < psqlist->eNum; i++) {
		if (psqlist->pdata[i] == val) {
			*pindex = i;
			printf_s("第一个22的下标为:%d\n", *pindex);
			return true;
		}
	}
	printf_s("顺序表中没有%d这个元素\n", val);
	return false;
}
bool modifyByPos(struct Sqlist * psqlist, int pos, int val) {//修改指定位置的元素
	if (isEmpty(psqlist)) {
		printf_s("顺序表为空!\n");
		return false;
	}
	if (pos<1 || pos>psqlist->eNum) {
		printf_s("修改位置不合法!\n");
		return false;
	}
	psqlist->pdata[pos - 1] = val;
	printf_s("已将第%d个元素修改为:%d\n", pos, val);
	return true;
}
void invert(struct Sqlist * psqlist) {//倒置顺序表元素
	if (isEmpty(psqlist)) {
		printf_s("顺序表为空!\n");
		exit(-1);
	}
	int i = 0;
	int j = psqlist->eNum - 1;
	int t;
	while (i < j) {
		t = psqlist->pdata[i];
		psqlist->pdata[i] = psqlist->pdata[j];
		psqlist->pdata[j] = t;
		i++;
		j--;
	}
	return;
}
void sortBubbling(struct Sqlist * psqlist) {//冒泡排序
	if (isEmpty(psqlist)) {
		printf_s("顺序表为空!\n");
		exit(-1);
	}
	int i, j,t;
	for (i = 0; i < (psqlist->eNum ); i++) {
		for ( j =0; j < (psqlist->eNum) - 1-i; j++) {
			if (psqlist->pdata[j] > psqlist->pdata[j + 1]) {
				t = psqlist->pdata[j];
				psqlist->pdata[j] = psqlist->pdata[j+1];
				psqlist->pdata[j+1] = t;
			}
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这段代码存在一些语法错误。具体来说: 1. `console.log` 方法中的字符串应该使用引号括起来,例如 `"每页 ${val} 条"` 和 `"当前页: ${val}"`。 2. `toggleContent` 方法应该定义在 `methods` 对象中,并且缺少一个左大括号 `{`。 3. `toggleContent` 方法中的 `console.log` 方法没有使用正确的字符串格式化,应该使用反引号括起来,并在占位符 `${}` 中使用变量名,例如 ``console.log(`当前高度: ${content.style.height}`)``。 4. 在 `v-for` 指令中,应该使用 `v-bind:key` 显式地绑定 `tableData` 数组中每个对象的唯一标识符,例如 `v-for="(item, index) in tableData" v-bind:key="item.number"`。 下面是修正后的代码: ``` <script> let v = new Vue({ el: '#app', data: { value1: '', value2: '', pickerOptions: { shortcuts: [ { text: '今天', onClick(picker) { picker.$emit('pick', new Date()); } }, { text: '昨天', onClick(picker) { const date = new Date(); date.setTime(date.getTime() - 3600 * 1000 * 24); picker.$emit('pick', date); } }, { text: '一周前', onClick(picker) { const date = new Date(); date.setTime(date.getTime() - 3600 * 1000 * 24 * 7); picker.$emit('pick', date); } } ] }, tableData: [ { number: '1', date: '2021-08-01' }, { number: '2', date: '2021-08-01' }, { number: '3', date: '2021-08-01' }, { number: '4', date: '2021-08-01' }, { number: '5', date: '2021-08-01' }, { number: '6', date: '2021-08-01' }, { number: '7', date: '2021-08-01' }, { number: '8', date: '2021-08-01' } ], currentPage1: 5, currentPage2: 5, currentPage3: 5, currentPage4: 4 }, methods: { deleteRow(index, rows) { rows.splice(index, 1); }, handleSizeChange(val) { console.log(`每页 ${val} 条`); }, handleCurrentChange(val) { console.log(`当前页: ${val}`); }, toggleContent() { var content = document.getElementById("content"); var btn = document.getElementById("toggle-btn"); if (content.style.height === "100px") { content.style.height = "auto"; btn.innerHTML = "收起"; } else { content.style.height = "100px"; btn.innerHTML = "展开"; } console.log(`当前高度: ${content.style.height}`); } } }); </script> <table> <thead> <tr> <th>序号</th> <th>日期</th> <th>操作</th> </tr> </thead> <tbody> <tr v-for="(item, index) in tableData" v-bind:key="item.number"> <td>{{ item.number }}</td> <td>{{ item.date }}</td> <td><button @click="deleteRow(index, tableData)">删除</button></td> </tr> </tbody> </table> <div class="pagination"> <el-pagination background layout="sizes, prev, pager, next, jumper" :current-page.sync="currentPage1" :page-sizes="[5, 10, 20]" :page-size="5" @size-change="handleSizeChange" @current-change="handleCurrentChange" :total="tableData.length" ></el-pagination> </div> <div id="content" style="overflow: hidden; height: 100px;"> 这是一段需要展开的内容。 </div> <button id="toggle-btn" @click="toggleContent">展开</button> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Evekkan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值