数据结构 线性表顺序存储 顺序表 C语言

37 篇文章 1 订阅
26 篇文章 0 订阅

实现顺序表的初始化、创建、遍历、查找、插入、删除等算法。
该程序的功能是对元素类型为整型的顺序表进行一些操作。该程序包括顺序表结构类型的定义以及对顺序表操作的具体的函数定义和主函数。

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef int status;
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
//author: 小柳学渣
typedef struct
{
	ElemType*elem;
	int length;
	int listsize;
}SqList;

/*创建*/
status SqListInit(SqList &L)
{
	L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if (!L.elem) 
	{
		printf("申请空间失败,程序退出");
		system("pause");
		exit(OVERFLOW);
	}
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
	return OK;
}

/*检查是否为空*/
status ListEmpty(SqList &L)
{
	if (L.length == 0)
		printf("顺序表现在为空\n");
	else
		printf("顺序表不为空\n");
	return OK;
}

/*遍历*/
status ListTraverse(SqList &L)
{
	ElemType *p;
	for (p = &(L.elem[0]); p < &(L.elem[L.length]); p++)
		printf("%4d", *p);
	printf("\n");
	return OK;
}

/*查找*/
status ListGet(SqList &L, ElemType e)
{
	int i = 0;
	while (i < L.length && (L.elem[i] != e)) 
		++i;
	if (i < L.length)
		printf("该元素在第%d个位置\n", i + 1);
	else
		printf("该元素不在线性表中\n");
	return OK;
}

/*插入*/
status ListInsert(SqList &L, int i, ElemType e)
{
	ElemType *p, *q;
	if (i<1 || i>L.length + 1)
	{
		printf("i值不合法\n");
		return ERROR;
	}
	if (L.length >= L.listsize)
	{
		L.elem = (ElemType*)realloc(L.elem, L.listsize + LISTINCREMENT * sizeof(ElemType));
		if (!L.elem)
		{
			exit(OVERFLOW);
			system("pause");
			printf("申请空间失败,程序退出");
		}
		L.listsize += LISTINCREMENT;
	}
	q = &(L.elem[i - 1]);
	for (p = &(L.elem[L.length - 1]); p >= q; --p)
		*(p + 1) = *p;
	*q = e;
	++L.length;
	return OK;
}

/*删除*/
status ListDelete(SqList &L, int i)
{
	ElemType *p, *q;
	if (i<1 || i>L.length)
	{
		printf("i值不合法");
		return ERROR;
	}
	p = &(L.elem[i - 1]);
	q = L.elem + L.length - 1;
	for (++p; p <= q; ++p)
		*(p - 1) = *p;
	--L.length;
	return OK;
}
//author: 小柳学渣
int main()
{
	SqList a;
	SqListInit(a);
	int j,k;
	printf("请输入要添加元素的个数:");
	scanf_s("%d", &k);
	printf("请先向线性表中输入%d个数:\n",k);
	for (j = 0; j < k; j++)
		scanf_s("%d", &a.elem[j]);
	a.length = j;
	printf("************************************************\n");
	printf("*顺序表操作                                    *\n");
	printf("************************************************\n");
	printf("*请选择                                        *\n");
	printf("*1、检查顺序表是否为空                         *\n");
	printf("*2、遍历顺序表                                 *\n");
	printf("*3、从顺序表中查找元素                         *\n");
	printf("*4、从顺序表中插入元素                         *\n");
	printf("*5、从顺序表中删除元素                         *\n");
	printf("*0、退出系统                                   *\n");
	printf("************************************************\n");

	int n = 0, e = 0, i = 0;
	while (1)
	{
		printf("\n请输入选项");
		scanf_s("%d", &n);
		switch (n)
		{
		case 1:ListEmpty(a); break;
		case 2:ListTraverse(a); break;
		case 3:printf("请输入要查找的数\n");
			scanf_s("%d", &e);
			ListGet(a, e);
			break;
		case 4:printf("请输入要在第几个位置前插入什么元素\n");
			scanf_s("%d%d", &i, &e);
			ListInsert(a, i, e);
			break;
		case 5:printf("请输入要删除第几个元素\n");
			scanf_s("%d", &i);
			ListDelete(a, i);
			break;
		case 0:exit(0); break;
		default:printf("没有这个选项\n"); break;
		}
	}
}

C中的动态分配与释放函数(malloc, realloc)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柳学渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值