实现线性表的增、删(按位置删除,按值删除)、改(按位置修改)、查(按位置找查)以及清空表,删除表。

头文件
函数申明以及结构体的定义

#ifndef _SEQLIST_H
#define _SEQLIST_H
#define N 32
typedef int data_t;

typedef struct seqlist{ //在堆区手动开辟一个存储空间(表空间)
	data_t buf[N];
	int last;
}Seqlist;
Seqlist *Create_Seqlist();//创建表

void Seqlist_Insert_Pos(Seqlist *seq,int pos,data_t data);//插入元素

int Seqlist_Is_Full(Seqlist *seq);//判断seq表是否还有空位

void Seqlist_Delete1(Seqlist *seq,int pos);//按位置删除表中元素

void Seqlist_Delete2(Seqlist *seq,int data); //按元素值删除表中元素

int Seqlist_Find(Seqlist *seq,int pos);//按位置查找元素

void Seqlist_Change(Seqlist *seq,int pos,int data); //按位置修改表中元素
#endif

函数模块

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include "seqlist.h"

Seqlist *Create_Seqlist() //创建表
{
	Seqlist *seq=(Seqlist *)malloc(sizeof(Seqlist));//手动为创建的表分配空间
	if(seq == NULL){
		printf("表创建失败!!\n");
		return;
	}else{
		printf("创建成功!\n");
	}
	seq->last = -1; //last为表尾值,刚创建的表为空表,last置为-1
	// printf("seq->last = %d\n",seq->last); 测试seq->last值
	return seq;
}

int Seqlist_Is_Full(Seqlist *seq){ //判断该表是否为满表
      //	printf("%d\n",seq->last);
	if(seq->last == N-1){
		printf("该表已满!!\n");
		return 1;
	}else{
//		printf("该表不满!%d \n");
		return 0;
	}
}

void Seqlist_Insert_Pos(Seqlist *seq,int pos,int data) //向表中插入元素
{
	int i;
	//printf("%d\n",seq->last);
	if(Seqlist_Is_Full(seq) == 0){ //判断表不为满表
//		printf("%d\n",seq->last);
		if(seq->last == -1){ //判断表是否为空表,为空表则从第一个直接插入
			seq->buf[0]=data;
			seq->last++;
		}else{
			if(pos != 0){ //插入位置不能为0,从pos位置开始插入,pos为1则从下标为0处插入
				for(i=(seq->last);i>=pos-1;i--){
					seq->buf[i+1]=seq->buf[i]; //依次从最后开始移动1位
				}
				seq->buf[pos-1]=data;
				seq->last++;
			}
		}
	}
}

void Seqlist_Show(Seqlist *seq) // 打印表的元素
{
	int i=0;
	for(i=0;i<=seq->last;i++){
		printf("%d ",seq->buf[i]);
	}
	printf("\n");

}

void Seqlist_Delete1(Seqlist *seq,int pos) //按位置删除表中元素
{
	int i;
	if(seq->last>=0){//判断该表是否为空表,为空表则不能进行删除操作
		for(i=pos;i<=seq->last;i++){
			seq->buf[i-1] = seq->buf[i];
		}
		seq->last--;
	}else
		printf("该表为空,不能进行删除!!\n");

}

void Seqlist_Delete2(Seqlist *seq,int data) //按元素值删除表中元素
{
	int i,j;
	for(i=0;i<=(seq->last);i++){ //遍历整个数组
		if( seq->buf[i] == data){  //找到值为data的元素
			for(j=i;j<=(seq->last);j++){ //记录其下标,将该下标后的元素从前面依次向前移一位
				seq->buf[j] = seq->buf[j+1];
			}
		}
	}
	seq->last--;
}

int Seqlist_Find(Seqlist *seq,int pos) //按位置查找表中元素
{
	int i,n;
	for(i=0;i<(seq->last);i++){
		if(i == pos){
			n = seq->buf[i-1];
		}
	
	}
	return n;
}


void Seqlist_Change(Seqlist *seq,int pos,int data) //按位置修改表中元素
{
	int i;
	for(i=0;i<(seq->last);i++){
		if(i == pos){ 
			seq->buf[i-1]=data;
		}

	}
}

主函数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include "seqlist.h"

int main()
{
	int pos,data=10;
	Seqlist *seq;
	seq=Create_Seqlist(); // 创建空表
	while(data--){
		Seqlist_Insert_Pos(seq,1,data);//向表中插入数据,
	}
	Seqlist_Show(seq); // 打印表中的元素
	Seqlist_Delete1(seq,3);//删除表中第三个位置的元素
	Seqlist_Delete2(seq,5);//删除表中值为5的元素
	Seqlist_Show(seq); // 打印删除后表中的元素
	printf("%d\n",Seqlist_Find(seq,5)); //按位置(5)查找表中元素
	Seqlist_Change(seq,3,66);//将第三个元素的值修改为66
	Seqlist_Show(seq); // 打印修改后表中的元素
	memset(seq->buf,0,sizeof(seq->buf));//将表中元素全部置为0(清空元素)
	Seqlist_Show(seq); // 打印清空表后表中的元素
	free(seq);//释放mallco申请的内存空间
	seq=NULL//将指针置为空
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值