线性表中顺序表基本运算的实现---数据结构(C)

线性表的顺序存储结构,顺序表基本运算的实现

#include<stdio.h>			//输入输出头文件
#include<stdlib.h>			//malloc和free都在这个头文件里
#define MaxSize 50
typedef struct 
 {
	int date[MaxSize];		//存放线性表中的元素,为了简便设置成整型
	int length;				//存放线性表的长度
}SqList;					//顺序表类型

int main()
{
	int a[10];
	int i,n,p;
	for(i=0;i<10;i++)
		a[i]=i;
	SqList *L;
	int e1,e2,e3,e4;
	bool qwe1,qwe2,qwe3,qwe4;		//定义几个布尔型变量给后面用	
	/***************定义函数类型**************/
	void CreateList(SqList *&L,int a[],int n);
	void InitList(SqList * &L);
	void Destroy(SqList * &L);
	bool Listkong(SqList * &L);
	int  ListLength(SqList * &L);
	void DispList(SqList* L);
	bool GetElem(SqList * &L,int i,int &e);
	int Locate(SqList * &L,int e);
	bool Deleteen(SqList * &L,int i,int &e);
	bool charu(SqList * &L,int i,int e);

	InitList(L);		//初始化
	printf("请输入要创建的元素个数:\n");
	scanf("%d",&n);			//不能超过10,因为我定义的数组大小为10
	CreateList(L,a,n);		//创建线性表
	printf("请输入:\n");
	printf(" 1,销毁线性表;\n 2,判断线性表是否为空表;\n 3,求线性表的长度;\n 4,输出线性表;\n 5.通过元素值序号求线性表的某个元素;\n 6.通过元素值查找元素值序号;\n 7,插入数据元素;\n 8,删除数据元素;\n 9,退出\n");

		while(1)//一直循环输入,直到主动退出
	{
	scanf("%d",&p); //输入想要使用的函数序号
	switch(p) 
	{
	case 1:
		Destroy(L);
		printf("销毁成功\n");
		break;
	case 2:
        qwe1=Listkong(L);
		if(qwe1==true)
		printf("空\n");
		else
			printf("不是空\n");
		break;
	case 3:
		printf("%d\n",ListLength(L));
		break;
	case 4:
		DispList(L);
        break;
	case 5:
		printf("请输入要查询的元素值序号:\n");
		scanf("%d",&i);
		qwe2=GetElem(L,i,e1);
		if(qwe2==true)
		printf("%d \n",e1);
		else
			printf("没有这个元素\n");
	break;
	case 6:
		printf("请输入想要查询序号的元素值:\n");
		scanf("%d",&e2);
		printf("%d\n",Locate(L,e2));
		break;
	case 7:
		printf("请输入要插入元素值的序号:\n");
		scanf("%d",&i);
        printf("请输入要插入的元素值:\n");
		scanf("%d",&e3);
		qwe3=charu(L,i,e3);
		if(qwe3==true)
			printf("插入成功!\n");
		else
			printf("插入失败!\n");
		break;
	case 8:
		printf("请输入想要删除的元素值序号:\n");
		scanf("%d",&i);
	qwe4=Deleteen(L,i,e4);
	if (qwe4==true)
	printf("删除成功!\n");
	else
		printf("删除失败!\n");
	break;
	case 9:
		exit(0);
	default:
		printf("输入错误:");
	}
}
     
	return 0;
}
/******************************建立顺序表**************************/
void CreateList(SqList * &L,int a[],int n)//由a中的n个元素建立顺序表
{
	int i=0,k=0;//k表示L中的元素个数,初始化为0
	L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
	while (i<n)
	{
		L->date[k]=a[i];//将元素a[i]存放到L中
		k++;i++;
	}
	L->length=k;//设置L的长度k

}
/***************************初始化线性表**************************/
void InitList(SqList * &L)
{
	L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
    L->length=0;//置空线性表的长度为0
}
/************************************销毁线性表**************/
void Destroy(SqList * &L)
{
	free(L);//释放L所指的顺序表空间
}
/*******************判断线性表是否为空表******************/
bool Listkong(SqList * &L)
{
	return(L->length==0);
}
/*********************求线性表的长度**********************/
int ListLength(SqList * &L)
{
	return(L->length);
}
/**************************输出线性表******************************/
void DispList(SqList* L)
{
     //int i;
	for (int i=0;i<L->length;i++)
		printf("%d ",L->date[i]);
	printf("\n");
	
	
}
/****************************求线性表中的某个数据元素值********************/
bool GetElem(SqList * &L,int i,int &e)
{
  if (i<1||i>L->length)
  {
	  return false;//参数错误时返回false
  }
  e=L->date[i-1];   //取元素值
  return true;    //成功找到元素时返回true
}
/*****************按元素值查找*******************/
int Locate(SqList * &L,int e)
{
	int i=0;
	while (i<L->length&&L->date[i]!=e)
	{
		i++;
	}
	if (i>=L->length)
	{
		return 0;
	}
	else
		return i+1;
}
/***********插入数据元素*************/
bool charu(SqList * &L,int i,int e)
{
	int j;
	if (i<1||i>L->length+1)
	{
		return false;
	}
	i--;
	for (j=L->length;j>i;j--)
	{
		L->date[j]=L->date[j-1];
	}	
	L->date[i]=e;
	L->length++;
	return true;
}
/*************删除数据元素**************/
bool Deleteen(SqList * &L,int i,int &e)
{
	int j;
	if(i<1||i>L->length)
		return false;
	i--;
	e=L->date[i];
	for (j=i;j<L->length-1;j++)
	{
		L->date[j]=L->date[j+1];
	}
	L->length--;
	return true;
}

 

发布了30 篇原创文章 · 获赞 29 · 访问量 9299

猜你喜欢

转载自blog.csdn.net/qq_44629109/article/details/101797849
今日推荐