线性表顺序存储结构基本运算——C语言

一、代码

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct{
    
    
	ElemType elem[MAXSIZE];
	int length;
}SqList;
void outlin(SqList s);					//打印表内容
void create(SqList *v);					//创建顺序表
void insert(SqList *v,int i,int x);		//插入数据
int findx(SqList v,int x);				//查找数据
void deleter1(SqList *v,int i);			//基于位置删除数据
void deleter2(SqList *v,int x);			//基于内容删除数据
int main(){
    
    
	SqList pz;
	int i,x,cord;
	do{
    
    
		printf("\n                主菜单\n");
		printf("        1        建立线性表\n");
		printf("        2        插入一个元素\n");
		printf("        3        基于位置删除一个元素\n");
		printf("        4        基于内容删除元素\n");
		printf("        5        查找元素\n");
		printf("        6        结束程序\n");
		printf("-------------------------\n");
		printf("请输入您的选择(1,2,3,4,5,6) :");
		scanf("%d",&cord);
		switch(cord){
    
    
			case 1:{
    
    
				create(&pz);	//创建线性表
				outlin(pz);		//输出表内容
			}break;
			case 2:{
    
    
				printf("\n 请输入插入的位置 i:");
				scanf("%d",&i);
				printf("\n 插入的数据 x:"); 
				scanf("%d",&x);
				insert(&pz,i,x);	//在位置i上插入数据x
				outlin(pz);			//输出表内容
			}break;
			case 3:{
    
    
				printf("\n 请输入删除的位置 i:");
				scanf("%d",&i);
				deleter1(&pz,i);	//删除位置i上的数据
				outlin(pz);			//输出表内容
			}break;
			case 4:{
    
    
				printf("\n 请输入删除的数据 x:");
				scanf("%d",&x);		
				deleter2(&pz,x);	//删除值为x的数据
				outlin(pz);
				break;
			}
			case 5:{
    
    
				printf("\n 请输入要查找的数据 x:");
				scanf("%d",&x);
				int t=findx(pz,x);		查找值为x的数据
				if(t!=0) printf("\n该元素所在位置为第 %d\n\n",t);
				system("pause");
				outlin(pz);	
				break;
			}
			case 6:exit(0);			//退出程序
		}
	}while(cord<=5);
	return 0;
}
void create(SqList *v){
    
    
	int i;
	printf("\n 请输入表长n=");
	scanf("%d",&(v->length));
	printf("\n 请输入表数据:\n");
	for(i=0;i<v->length;i++){
    
    
		printf("\n data%d=",i+1);
		scanf("%d",&(v->elem[i]));
	}
	printf("\n表创建成功\n\n");
	system("pause"); 
}
void outlin(SqList s){
    
    
	system("cls");
	int i;
	printf("表信息:\n"); 
	printf("位置  元素值   物理地址"); 
	for(i=1;i<=s.length;i++)
		printf("\n%2d %6d %13p",i,s.elem[i-1],&s.elem[i-1]);
	printf("\n-------------------------");
}

void insert(SqList *v,int i,ElemType x){
    
    
	int j;
	if((i<0)||(i>v->length)){
    
    
		//	system("cls");
		printf("\n Error!您输入的位置有误,请重新输入\n\n");
		system("pause");
	}else{
    
    
		for(j=v->length;j>=i;j--)
			v->elem[j]=v->elem[j-1];
		v->elem[j]=x;
		v->length++;
		printf("\n数据插入成功!\n\n"); 
		system("pause");
	}
}
void deleter1(SqList *v,int i){
    
    
	int j;
	if((i<0)||(i>v->length)){
    
    
		printf("\n No exit!\n");
		system("pause");
	}else{
    
    
		for(j=i;j<v->length;j++)
			v->elem[j-1]=v->elem[j];
		v->length--;
		printf("\n成功删除%d位置上的数据\n\n",i);
		system("pause");
	}
}
void deleter2(SqList *v,int x){
    
    
	int temp=v->length;
	for(int i=0;i<v->length;i++){
    
    
		if(v->elem[i]==x){
    
    
			for(int j=i;j<v->length-1;j++){
    
    
				v->elem[j]=v->elem[j+1];
			}
			v->length--;
			i--;
		}
	}
	if(temp==v->length){
    
    
		printf("\n删除失败!未找到数据%d\n\n",x);
	}else{
    
    
		printf("\n成功删除表中所有的数据%d\n\n",x);
	}
	system("pause");
}
int findx(SqList v,int x){
    
    
	for(int i=0;i<v.length;i++){
    
    
		if(v.elem[i]==x) return i+1;
	}
	printf("\n未在表中找到数据%d\n\n",x);
	system("pause");
	return 0;
}

二、运行结果

1.建立线性表

在这里插入图片描述
在这里插入图片描述

2.插入数据

在这里插入图片描述

在这里插入图片描述

3.删除某位置的元素

在这里插入图片描述
在这里插入图片描述

4.删除值为某的数据

在这里插入图片描述
在这里插入图片描述

5.查找元素

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44932745/article/details/128723877