数据结构C语言版(清华大学_唐国民_第3版)顺序表

在这里插入图片描述

//数据结构C语言版(清华大学_唐国民_第3版)
//顺序表功能实现,书P17 例子2.2.3,与书上代码有些许出入,不用在意,重要的是思路

#include <stdio.h>
#include <stdlib.h>
#define Maxsize 1024

typedef char ElementType;
struct LNode {
	ElementType Data[Maxsize];
	int Last;
};
typedef struct LNode* List;

void Create(List Ptrl);
void Insert(List Ptrl,ElementType x,int i);
void Printout(List Ptrl);
void Delete(List Ptrl,int i);

int main()
{
	char cmd, x;
	int i;
	List Ptrl;
	Ptrl = (List)malloc(sizeof(struct LNode));
	Ptrl->Last = -1;
	Create(Ptrl);
	Printout(Ptrl);
	do
	{
		printf("i,I...插入\n");
		printf("d,D...删除\n");
		printf("q,Q...推出\n");
		do
		{
			fflush(stdin);
			scanf("%c", &cmd);
		} while ((cmd != 'q') && (cmd != 'Q') && (cmd != 'd') && (cmd != 'D') && (cmd != 'i') && (cmd != 'I'));
		switch (cmd)
		{
			case 'i':
			case 'I':
				printf("请输入你要插入的数据:");
				fflush(stdin);
				scanf("%c",&x);
				printf("请输入你要插入的位置:");
				scanf("%d", &i);
				Insert(Ptrl, x, i);
				Printout(Ptrl);
				break;
			case 'd':
			case 'D':
				printf("请输入你要删除的元素的位置:\n");
				fflush(stdin);
				scanf("%d", &i);
				Delete(Ptrl, i);
				Printout(Ptrl);
				break;
			}
	} while ((cmd != 'q') && (cmd != 'Q'));

	return 0;
}

void Create(List Ptrl)
{
	int i, n;
	char tmp;
	printf("请输入数据的个数:");
	scanf("%d",&n);
	for (i = 0; i < n; ++i) {
		printf("data[%d]=",i);
		fflush(stdin);
		scanf("%c",&tmp);
		Ptrl->Data[i] = tmp;
		Ptrl->Last++;
	}
	printf("\n");
}

void Printout(List Ptrl)
{
	int i;
	for (i = 0; i <= Ptrl->Last; ++i) {
		printf("data[%d]=", i);
		printf("%c\n", Ptrl->Data[i]);
	}
}

void Insert(List Ptrl,ElementType x,int i)
{
	int j;
	if (Ptrl->Last == Maxsize - 1) {
		printf("表满!\n");
		return;
	}
	if (i<1 || i>Ptrl->Last + 2) {
		printf("位置不合法!\n");
		return;
	}
	for (j = Ptrl->Last; j >= i - 1; --j) {
		Ptrl->Data[j + 1] = Ptrl->Data[j];
	}
	Ptrl->Data[i - 1] = x;
	Ptrl->Last++;
}

void Delete(List Ptrl,int i)
{
	int j;
	if (i<1 || i>Ptrl->Last+1) {
		printf("位置不合法!\n");
		return;
	}
	for (j = i; j <= Ptrl->Last; ++j) {
		Ptrl->Data[j - 1] = Ptrl->Data[j];
	}
	Ptrl->Last--;
	return;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值