顺序表创建、查找、插入、删除操作集(c语言实现)

顺序表创建、查找、插入、删除操作集(c语言实现)

刚开始学数据结构,看c语言版本的,但看书总是想不通,网上荡的资源也是错的(而且错的很离谱)就自己试着操作了一下,发现还是很棘手的。我编写的每个函数参数都是用指向结构的指针来操作,这样的可以保证改变主调函数中的实参,并且用了malloc()函数对内存块进行了分配。

ps:小白一个,新手有不足之处请见谅…

#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 100
(用typedef增强代码的可移植性)
typedef int  ElemType;
typedef int STATUS;
typedef struct Li{
	ElemType arr[MAXSIZE];   // typedef 类型 ElemType;
	int length;              //构造的表的长度 
} * sqlist;                     //新类型名*SqList,是一个指针,用于创建一个新的顺序表 

sqlist EemtyMake();
int LocateElem (sqlist L , ElemType e); 
STATUS Insert (sqlist L,int i,ElemType e);
STATUS Delete (sqlist L,int i);
int main()
{
	sqlist L = EemtyMake(); 
	printf("请输入表的长度(最大不超过100):");
	int n;
	scanf("%d",&n);
	L->length = n;
	
	printf("请输入需要定义好的元素: ");
	int i;
	for(i = 0;i<L->length;i++){
		scanf("%d",&L->arr[i]);
	} //录入元素完毕
	
	printf("你输入的表是: \n");
	for(i = 0;i<L->length;i++){
		printf("%d ",L->arr[i]);
	} 
	printf("\n");

	int num ;
	printf("请输入你要检索的元素: ") ;
	while(scanf ("%d",&num)==1){
	
		LocateElem(L,num);
		printf("请输入你要检索的元素: ") ;
	}
	
	printf("查找完毕!\n") ;
	
	
	Insert (L,2,2); 
	printf("你的顺序表是: \n");
	for(i = 0;i<L->length;i++){
		printf("%d ",L->arr[i]);
	} 
	printf("\n");
	
	Delete (L,2);
	printf("你的顺序表是: \n");
	for(i = 0;i<L->length;i++){
		printf("%d ",L->arr[i]);
	} 


	
}
/*建立一个空表*/ 
sqlist EemtyMake(){
	sqlist list;
	list = (sqlist)malloc(sizeof(struct Li));(为了让传入的形参指针初始化,并返回初始化后的指针)
	
	list->length =0; 
	return list;
}
/*检索一个元素*/ 
int LocateElem (sqlist L , ElemType e){
	int i;
	int judge = 0;
	
	for(i = 0;i<L->length;i++){
		if (L->arr[i] == e){
			judge = 1;
			printf("%d ",i+1); 
			printf("\n");
			
		}
}
	if (judge == 0){
	
		printf("你要找的元素不存在\n");
		return 0;
	}
	else return 1;
/*查找的次数平均是n/2;*/
}

/*插入一个元素*/
STATUS Insert (sqlist L,int i,ElemType e){
	//新定义一个STATUS类型,用以函数返回 0 or 1
	STATUS ERROR = 0;
	STATUS OK = 1;
	if (i<1 || i>L->length)
		return ERROR;
	else{
		int j ;
		for (j = L->length-1;j>=i-1;j--){
			L->arr[j+1] = L->arr[j];
		} 
		
		L->arr[i-1] = e;
		L->length++;
		return OK;
	} 
}
/*删除一个元素*/ 
STATUS Delete (sqlist L,int i){
	STATUS ERROR = 0;
	STATUS OK = 1;
	if (i<1 || i>L->length)
		return ERROR;
	else{
		int j ;
		for (j = i;j<=L->length-1;j++){
			L->arr[j-1] = L->arr[j];
		} 
		
		L->length--;
		return OK;
	} 
}

以下是输出结果:

在这里插入图片描述

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
顺序表是一种常见的线性存储结构,可以用于实现顺序的插入删除查找操作。以下是用C语言实现顺序表的示例代码: ```c #include <stdio.h> #define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int length; } SeqList; //初始化顺序表 void initList(SeqList *list) { list->length = 0; } //插入元素 void insert(SeqList *list, int element, int position) { if (list->length >= MAX_SIZE) { printf("顺序表已满,无法插入新元素\n"); return; } if (position < 1 || position > list->length + 1) { printf("插入位置错误\n"); return; } for (int i = list->length; i >= position; i--) { list->data[i] = list->data[i-1]; //后移元素 } list->data[position-1] = element; list->length++; } //删除元素 void removeElement(SeqList *list, int position) { if (position < 1 || position > list->length) { printf("删除位置错误\n"); return; } for (int i = position; i < list->length; i++) { list->data[i-1] = list->data[i]; //前移元素 } list->length--; } //查找元素 int search(SeqList *list, int element) { for (int i = 0; i < list->length; i++) { if (list->data[i] == element) { return i+1; //返回元素位置 } } return -1; //未找到返回-1 } int main() { SeqList list; initList(&list); insert(&list, 1, 1); insert(&list, 2, 2); insert(&list, 3, 3); removeElement(&list, 2); int position = search(&list, 3); printf("元素3在位置%d\n", position); return 0; } ``` 以上代码实现顺序表的初始化、插入删除查找等基本操作。可以根据需要修改代码的MAX_SIZE来改变顺序表的最大长度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值