数据结构--顺序表的增删改查

#include 
#include 
#include 
#include 
#define MAXLEN 100

typedef int DataType;

typedef struct seqlist
{
	DataType Data[MAXLEN];
	int Length;

}SeqList;

SeqList L;


void InitList(SeqList *L)//初始化
{
	L->Length=0;
}

void CreateList(SeqList *L)//创建
{
	int i,n;
	printf("\n请输入你要插入的元素个数!\n");
	scanf("%d",&n);
	printf("\n请输入%d个整数\n",n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&L->Data[i]);
	}
	L->Length=i;

}

void DispList(SeqList *L)//输出
{
	int i;
	for(i=0;i<L->Length;i++)
		printf("%-4d",L->Data[i]);
	printf("\n");
}

int DelList(SeqList *L)//删除
{
	int n;
	printf("请输入你要删除的元素的位置\n");
	scanf("%d",&n);
	if(L->Length==0)
	{
		printf("线性表为空,不能删除\n");
		return 0;
	}

	else if(n<1||n>L->Length)
	{
		printf("输出位置出错,删除失败\n");
		return 0;
	}

	else 
	{
		for(n=n-1;n<L->Length;n++)
		{
			L->Data[n]=L->Data[n+1];

		}
		L->Length-=1;
		printf("删除成功!删除后的线性表为:\n");
		return 1;
	}
}

int Lookup1(SeqList *L)//按值查找
{
	int i,n,y=0;
	printf("请输入你要查找的元素\n");
	scanf("%d",&n);

	for(i=0;i<L->Length;i++)
	{
		if(n==L->Data[i])
			y=1;
	}

	if(y==0)
	{
		printf("你输入的值不存在于线性表!\n");
		return 0;
	}
	else
	{
		printf("你查找的元素位置为:");
		for(i=0;i<L->Length;i++)
		{
			if(n==L->Data[i])
				printf(" %d",i+1);
		}
		printf("\n");
		return 1;
	}
}

int Lookup2(SeqList *L)//按位置查找
{
	int n;
	printf("请输入你要查找元素的位置\n");
	scanf("%d",&n);
	if(n<1||n>L->Length)
	{
		printf("位置出错!\n");
		return 0;
	}
	if(n <= L->Length)
	{
		printf("你查找元素的值为:%d\n",L->Data[n-1]);
		return 1;
	}
}

int Ins(SeqList *L)//插入
{
	int n,i,num;
	printf("请输入你要插入的位置\n");
	scanf("%d",&n);
	if(n<1||n>L->Length)
	{
		printf("插入位置出错\n");
		return 0;
	}
	if(n <= L->Length)
	{
		printf("请输入你要插入的元素\n");
		scanf("%d",&num);
		{
			for(n-=1,i=L->Length;i>n;i--){
				L->Data[i]=L->Data[i-1];
			}
		}
	}
			L->Data[n]=num;
			L->Length++;
			printf("插入元素成功,插入后的线性表为:\n");
			return 1;
}

void Menu()
{
	printf("\n	        顺序栈的各种操作");
	printf("\n	==================================");
	printf("\n	|       1 建立线性表             |");
	printf("\n	|       2 插入操作               |");
	printf("\n	|       3 删除操作               |");
	printf("\n	|       4 按位置查找             |");
	printf("\n	|       5 按值查找               |");
	printf("\n	|       6 求线性表长度           |");
	printf("\n	|       0 返回                   |");
	printf("\n	==================================");
	printf("\n请输入菜单号(0~6):");

}

int main()
{
	int number;
	char ch='Y';

	SeqList L;
	InitList(&L);			//初始化
	while(ch=='Y'||ch=='y')
	{

	Menu();
	scanf("%d",&number);
	getchar();
	switch(number)
	{
		case 1:
			CreateList(&L);
			printf("建立线性表成功\n");
			DispList(&L);
			break;
		case 2:
			Ins(&L);
			DispList(&L);
			break;
		case 3:
			DelList(&L);
			DispList(&L);
			break;
		case 4:
			Lookup2(&L);
			DispList(&L);
			break;
		case 5:
			Lookup1(&L);
			DispList(&L);
			break;
		case 6:
			printf("当前线性表的长度为:%d\n",L.Length);
			break;
		case 0:
			ch='n';
			break;
		default:
			printf("输入错误,请输入0~6选择!\n");
		}
	}
	return 0;
}

你可能感兴趣的:(笔记)