栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构——线性表(顺序表)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构——线性表(顺序表)


#include
#define MAXLEN 100  
typedef struct     
{
	int array[MAXLEN];   
	int  length;      
}SeqList;


 
void InitList(SeqList *L)
{
	//初试化顺序表的函数L
	L->length = 0;
}

  
void CreateList(SeqList *L,int n)
{ 
	//建立顺序表并输入多个元素函数
	int i;
	printf("请输入%d个整数:",n);
	for (i = 0 ; i < n; i++)
	{
		scanf_s("%d",&L->array[i]);
	}
	L->length = i;   
}

       
int InsElem(SeqList* L, int i, int x) 
{            
	
	int j;
	if (L->length >= MAXLEN)       //检查顺序表是否已满
	{
		printf("顺序表已满!");
		return -1;
	} 
	if (i<1 || i>L->length + 1)               //检查插入位置的正确性,是否存在这个位置
	{
		printf("插入位置错误!");
		return 0;
	}
	if (i == L->length + 1)				//插入位置为表尾,直接插入,不用移动数组
	{
		L->array[i - 1] = x;      //插入新元素
		L->length++;				//表长加1
		return 1;
	}
	for (j = L->length - 1; j >= i - 1; j--) //插入位置不为表尾,插入点后各位置向后移
	{
		L->array[j + 1] = L->array[j];       
	}
	L->array[i - 1] = x;            //插入新元素
		L->length++;				//表长加1
		return 1;
}

 
int  DelElem(SeqList *L,int i,int *x)    
{
	int j;
	if (L->length == 0)                //判断顺序表是否为空 
	{
		printf("顺序表为空!");
		return 0;
	}
	if (i<1 || i>L->length)         //检查顺序表删除的位置是否正确
	{
		printf("不存在第i个元素!");
		return 0;
	}
	*x = L->array[i - 1];         
	for (j = i; j < L->length; j++)
		    //这种写法是错误的,i+1的下标超界了
		L->array[j-1] = L->array[j];      
		L->length--;
	
	return 1;
}


int GetElem(SeqList* L, int i, int *x)    //L顺序表存在, i表中元素的位置, x找到该元素并返回的值
{ 
         //按位置查找
	if (i<1 || i>L->length)    //判断查找位置是否正确
	{
		return 0;
	}
	else
	{
		*x = L->array[i - 1];      //将表中第i个元素赋值给指针变量
		return 1;
	}
 }
		
int  Locate(SeqList* L, int x)
{
	//按值查找
	int i=0;
	while (i < L->length && L->array[i] != x)
		i++;
		if (i >= L->length)   //i大于表长返回失败
			return 0;      
		else 
			return i + 1;       // 返回元素的位置
}

void DispList(SeqList* L)
{
//显示顺序表中的每个元素
	int i; 
	for (i = 0; i < L->length; i++)
	{
		printf("%4d",L->array[i]);
	}
}

void Menu()
{
	printf("nn1.建立顺序表");
	printf("n2.插入元素");
	printf("n3.删除元素");
	printf("n4.按位置查找元素"); 
	printf("n5.按值查找元素");
	printf("n6.求顺序表的长度");
	printf("n7.返回");
	printf("请输入菜单号(1-7):");

}
int main()
{  
	SeqList L;   
	int x;    //元素的值
	int i;       //线性表元素的位置
	int ch2,ch1='y';
	int n;     //线性表的个数
	int loc;
	int a;
	while (ch1 == 'y') {
		Menu();
		scanf_s("%d", &ch2);
		getchar();
		switch (ch2)
		{
		case 1:
			InitList(&L);
			printf("请输入建立线性表的个数:");
			scanf_s("%d", &n);
			CreateList(&L, n);
			printf("建立的线性表为:");
			DispList(&L);
			break;
		case 2:
			printf("请输入要插入的位置:");
			scanf_s("%d",&i);
			printf("请输入要的元素:");
			scanf_s("%d",&x);
			if (InsElem(&L, i, x))
			{
				printf("已成功在第%d的位置上插入元素%d,插入后的线性表为:n", i, x);
				DispList(&L);
			}
			else
				printf("插入的参数错误!");
			break;
		case  3:
			printf("请输入要删除元素的位置:");
			scanf_s("%d",&i);
			if (DelElem(&L, i, &x))
			{
				printf("已成功在第%d的位置上删除%d,删除后的线性表为:n", i, x);
				DispList(&L);
			}
			else
				printf("删除的参数错误!");
			break;
		case 4:
			printf("请输入要查看的表中元素的位置(从1开始):");
			scanf_s("%d",&i);
			if (GetElem(&L, i, &x))
			{
				printf("当前线性表的第%d个位置是:%d", i, x);
			}
			else
				printf("输入的位置错误!");
			break;
		case 5:
			printf("请输入要查找的元素值为:");
			scanf_s("%d",&x);
			loc = Locate(&L, x);
			if (loc)
			{
				printf("查找元素值为%d的位置为:%d",x,loc);
			}
			else
				printf("表中无此元素!");
			break;
		case 6:
			printf("当前线性表的长度为:%d",L.length);
			break;
		case 7:
			ch1 = 'n';
			break;
		default:printf("请在1-7之间进行输入!");
		}
	}
	return 0;
}

效果图:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779413.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号