顺序表——c

// 顺序表.cpp: 定义控制台应用程序的入口点。
// 陈鹏20171126


#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"


#define MAXSIZE 1024			
typedef int elemtype;			
typedef struct sequlist{		
	elemtype data[MAXSIZE];		
	int length;			
}SequList;


//初始化
SequList *Init() {									
	SequList *Link;									
	Link = (SequList *)malloc(sizeof(SequList));		//申请空间
	return Link;						
}


//插入数据 x为值 i为位置
int Add(SequList *List, int x,int i) {
	if (i<0 || i>List->length) {
		printf("ERROR\n");
		return 0;
	}
	
	for (int j = List->length; j >= i; j--) {
		List->data[j + 1] = List->data[j];				//位置往后挪一个
	}
		List->data[i] = x;						
		List->length++;							
	return 1;
}


//按位置查
int Fond(SequList *List,int i,int p) {
	if(p==0)											
	printf("%d", List->data[i-1]);						
	else if(p==1){
		for (int j = 0; j < List->length; j++) {		
			if (List->data[j] == i)				
				printf("你所查询的值位于%d\n", j+1);	
		}
	}
	return 1;
}


//删除
int Delets(SequList *List, int i, int p) {
	if (p == 0) {		
		for (int j = i; j < List->length; j++) {		// 从删除的位置开始后面的数据往前挪一个
			List->data[j] = List->data[j + 1];
		}
		List->length--;						//长度减一
	}else if (p == 1) {
		for (int j = 0; j < List->length; j++) {		//遍历一遍找出 值 的位置
			if (List->data[j] == i) {
				for (int t = j; t < List->length; t++) {
					List->data[t] = List->data[t + 1];
				}
				List->length--;
			}	
		}
	}
	return 1;
}
//遍历
int Prints(SequList *List) {
	for (int i = 0; i < List->length; i++) {
		printf("%3d\n", List->data[i]);
	}
	return 1;
}


int main()
{
	SequList *List;	
	List = Init();
	List->length = 0;
	Add(List, 10, 0);Add(List, 20, 0);Add(List, 30, 0);
	Add(List, 60, 0);Add(List, 40, 1);Add(List, 70, 2);
	Prints(List);
	//查询
	printf("请输入你需要查询的值\n输入0按位置查询\n输入1按值查询\n");
	int p,i;
	scanf_s("%d", &p);
	printf("请输入值或位置\n");
	scanf_s("%d", &i);
	Fond(List, i, p);
	//删除
	printf("请输入你需要删除的值\n输入0按位置查询\n输入1按值查询\n");
	scanf_s("%d", &p);
	printf("请输入值或位置\n");
	scanf_s("%d", &i);
	Delets(List, i, p);
	//删除后遍历
	Prints(List);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值