数据结构之顺序表

#define _CRT_SECURE_NO_WARNINGS 


#include <stdio.h>
#include <stdlib.h>


#define maxsize 1024
typedef int datatype;

typedef struct
{
	datatype data[maxsize];
	int last;
} sequenlist;

int insert(sequenlist *p, datatype x, int i);  //插入函数
int delete(sequenlist *p, int i);			 //删除函数


int main()
{
	sequenlist *p;
	int i, ch, n;
	p = (sequenlist *)malloc(sizeof(sequenlist));
	while (1)
	{
		printf("请选择:   \n");
		printf("(1)输入顺序表\t");
		printf("(2)插入数据\t");
		printf("(3)删除数据\t");
		printf("(4)结束\n");
		scanf("%d",&ch);
		switch (ch)
		{
		case 1:
			printf("请输入顺序表中数据个数n =");
			scanf("%d", &n);
			printf("\n");
			
			for (i = 0; i < n; i++)
			{
				printf("请输入第%d个整形数据的值:", i + 1);
				if (scanf("%d", &p->data[i]) != 1)
				{
					printf("\n输入数据类型错误,按任意键退出\n");
					system("pause");
					return;
				}
			}
			p->last = n - 1;
			printf("\n输入的顺序表顺序为:");
			for (i = 0; i <= p->last; i++)
				printf("%d ", p->data[i]);
			printf("\n");
			break;

		case 2:
			printf("\n请输入插入顺序表中的数据:");
			scanf("%d",&n);
			printf("\n请输入插入顺序表中的位置:");
			scanf("%d",&i);
		
			if (insert(p, n, i))
			{
				printf("插入后的数据顺序表为:");
				for (i = 0; i <= p->last; i++)
					printf("%d ", p->data[i]);
				printf("\n\n");
			}
			break;

		case 3:
			printf("请输入要删除数据的位置:");
			scanf("%d",&i);
			if (delete(p,i))
			{
				printf("删除后的数据顺序表为:");
				for (i = 0; i <= p->last; i++)
					printf("%d ", p->data[i]);
				printf("\n\n");
			}
			break;
		case 4:
			return 0;
		

		}


	}

	system("pause");
}


int insert(sequenlist *p, datatype x, int i)  //插入函数
{
	int j;
	if (p->last >= maxsize - 1)
	{
		printf("空间溢出\n");
		return 0;  //插入失败
	}
	else if (i < 1 || i > p->last + 2)
	{
		printf("插入位置非法\n");
		return 0;	//插入失败
	}
	else
	{
		for (j = p->last; j > i; j--)
			p->data[j + 1] = p->data[j];
		p->data[i - 1] = x;
		//printf("%d  %d\n",i,j);
		p->last = p->last + 1;   //长度加1
	}
	return 1;  //插入成功
}

int delete(sequenlist *p, int i)			 //删除函数
{
	int j;
	if (p->last + 1 < i || i < 0)
	{
		printf("删除位置非法\n");
		return 0;	//删除失败
	}
	else
	{
		for (j = i; j <= p->last; j++)
			p->data[j - 1] = p->data[j];
		p->last--;
	}
	return 1;		//删除成功
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值