数据结构——线性表的基本操作(顺序表)

在这里插入图片描述

#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLEN 100       	/* MAXSIZE 要大于实际线性表的长度 */ 
typedef int elementtype;      	/*根据需要,elementtype也可以定义为其他任何类型*/
typedef struct               	/*定义线性表*/
{
	elementtype s[MAXLEN];  	/*定义线性表中元素,MAXLEN-1为线性表的最大容量*/
	int len;                  /*定义线性表的表长*/
}SqList;


//插入
int InsertSqlist(SqList *sql,int i,elementtype x)
{ 
	int j;
	if((i<1)||(i>sql->len+1)) 	/*首先判断插入位置是否合法*/
	{
		printf("插入位置%d不合法\n",i);
		return(0);
	}
	if(sql->len>=MAXLEN-1)
	{
		printf("表已满无法插入");
		return(0);
	}
	for(j=sql->len;j>=i;j--)
		sql->s[j+1]=sql->s[j];   	/*向后移动数据,腾出要插入的空位*/
	sql->s[j+1]=x;           		/*修正插入位置为j+1,将新元素插入到s[j+1]位置*/
	(sql->len)++;            		/*表长加1*/
	return(1);               		/*插入成功,返回值为1*/
}

//删除操作
int DelSqlist(SqList *sql,int i) 
{
	int j;
	if((i<1)||(i>sql->len)) 	/*首先判断删除位置是否合法*/
	{
		printf("删除位置%d不合法\n",i);
		return(0);
	}
	for(j=i;j<sql->len;j++)
	{
		//printf("当前删除的元素是%d\n",sql->s[j]);
		//printf("当前删除元素后一个是%d\n",sql->s[j+1]);
		sql->s[j]=sql->s[j+1]; 	/*后面的元素向前移动数据,覆盖要删除的空位*/	
	}	
	(sql->len)--; 				/*表长减1*/
	return(1); 					/*删除成功,返回值为1*/
}

void main()
{
	SqList seq;
	int p,q,r;
	int i,a;
	int cycle=1;
	//设置颜色
	system("color 2F");
	while(cycle){
		printf("请输入要执行的操作:\n");
		printf("\t-----------------------------------------\n");
		printf("\t|\t1.    建表    \t\t\t|\n");
		printf("\t-----------------------------------------\n");
		printf("\t|\t2.    插入    \t\t\t|\n");
		printf("\t-----------------------------------------\n");
		printf("\t|\t3.    删除    \t\t\t|\n");
		printf("\t-----------------------------------------\n");
		printf("\t|\t4.    退出    \t\t\t|\n");
		printf("\t-----------------------------------------\n");
		//choose =getch();
		scanf("%d",&a);
		switch (a)
		{
		case 1://建表
			system("cls");
			printf("请输入线性表的长度:");
			scanf("%d",&r);
			seq.len =r;
			printf("请输入线性表的各元素值:");	
			for(i=1; i<=seq.len; i++)
				/*赋线性表各元素初值,为与前面的概念描述一致,seq.s[0]闲置不用*/
			{
				scanf("%d",&seq.s[i]);
			}
			break;
			system("pause");
		case 2://插入
			system("cls");
			printf("现在线性表里面数据为:");
			for(i=1; i<=seq.len; i++)
			{
				printf("%d  ",seq.s[i]);
			}
			printf("\n请输入要插入的位置:");
			scanf("%d",&p);
			printf("请输入要插入的元素值:");
			scanf("%d",&q);	
			InsertSqlist (&seq,p,q);                 /*调用插入元素的函数*/
			printf("插入元素后的线性表:\n");
			for(i=1; i<=seq.len; i++)
			{
				printf("%d  ",seq.s[i]);
			}
			system("pause");
			break;
		case 3://删除
			system("cls");
			printf("现在线性表里面数据为:");
			for(i=1; i<=seq.len; i++)
			{
				printf("%d  ",seq.s[i]);
			}
			printf("\n请输入要删除的位置:");
			scanf("%d",&p);
			//printf("请输入要删除的元素下标:");
			//scanf("%d",&q);	
			DelSqlist (&seq,p);                 /*调用插入元素的函数*/
			printf("删除元素后的线性表:\n");
			for(i=1; i<=seq.len; i++)
			{
				printf("%d  ",seq.s[i]);
			}
			system("pause");
			break;
		case 4:
			cycle=0;
			printf("RZH欢迎您再次使用:\n");
			break;
		default	:
			printf("输入有误,欢迎您再次使用:\n");
			cycle=0;

		}
	}
	
}




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值