线性表的顺序存储及其基本操作

#include   "pch.h"
#include <stdio.h>
#include<stdlib.h>
#include <conio.h>
#define ListSize 10

typedef int DataType;
typedef struct
{
	DataType data[ListSize];
	int length;
}SeqList;

// 返回顺序表L的表长L->length 
int LengthList(SeqList *L)
{
	return L->length;
}

// 返回顺序表L的第i个结点的值 
DataType GetList(SeqList *L, int i)
{
	return L->data[i - 1];
}

// 将t插入顺序表L的第i个结点位置上 
int InsertList(SeqList *L, DataType t, int i)
{
	int j;
	if (i<  1|| i>L->length + 1)
	{
		puts("插入位置错误");
		return 0;
	}

	if (L->length >= ListSize)
	{
		puts("表满不能插入");
		return 0;
	}

	for (j = L->length - 1; j >= i - 1; j--)
	{
		L->data[j + 1] = L->data[j];
	}

	L->data[i - 1] = t;
	L->length++;
	return 1;
}

void show(SeqList *L)
{
	for (int j = 0; j < LengthList(L); j++)
	{
		printf("%4d", L->data[j]);
		printf("\n");
	}
}

void MenuShow()
{
	// 菜单显示
	printf("\n\t\t 线性表的操作 \n");
	printf("\n\t\t1  求表长 \t\t2 取表元  \n");
	printf("\n\t\t3  插入   \t\t\t4  退出系统  \n");
	printf("\n\n");
}

void MenuSelect(SeqList *L, char ch)
{
	int i, x;
	switch (ch)
	{
	case '1':printf("表长为:%d\n", LengthList(L)); break;
	case '2':printf("请输入取第几个元素:");
		scanf_s("%d", &i);
		getchar();
		if (i< 1|| i>L->length)
		{
			puts("输入错!");
		}
		else {
			printf("第%d个元素为%d\n", i, GetList(L, i));
		}
		break;

	case '3':printf("请输入要插入元素的位置和数值:");
		scanf_s("%d%d", &i, &x);
		getchar();
		printf(" 原线性表:\n"); show(L);

		if (InsertList(L, x, i))
		{
			printf("插入后的线性表  \n:");
			show(L);
		}
		else
		{
			printf("插入失败。 \n");
		}
		break;
	case '4':printf("欢迎再次使用,再见!\n:");
		exit(0);

	}
}


/*
int main()
{
	SeqList T = { {12,35,25,17,49,8,20},7 };
	char ch;
	while (1)
	{
		system("cls");
	MenuShow();
		printf("请根据菜单选择所需要的操作");
		ch = getchar();
		getchar();
		MenuSelect(&T, ch);
	printf(" 按任意键继续!");
		_getch();
	_flushall();
	}
	return 0;

}

*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值