数据结构一:顺序表

 sqlist.h

#pragma once

//条件编译的功能是防止头文件重复包含,如果不包含SQLIST_H__则定义宏名宏体
#ifndef SQLIST_H__
//宏名
#define SQLIST_H__

//宏体
#define DATASIZE 1024
typedef int datatype;

typedef struct node_st 
{
	datatype data[DATASIZE];
	int last;
}sqlist;

sqlist* sqlist_creat();

void sqlist_creat1(sqlist **);

int sqlist_insert(sqlist *,int i,datatype *);

int sqlist_delete(sqlist*, int i);

int sqlist_find(sqlist*, datatype*);

//判断是否为空
int sqlist_isempty(sqlist*);

//设置为空
int sqlist_setempty(sqlist*);

int sqlist_getnum(sqlist*);

void sqlist_display(sqlist*);

int sqlist_destroy(sqlist*);

int sqlist_union(sqlist*, sqlist*);

#endif

sqlist.c

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

sqlist* sqlist_creat()
{
	sqlist* me = NULL;
	me = (sqlist*)malloc(sizeof(*me));
	if (me == NULL)
	{
		return NULL;
	}
	me->last = -1;
	return me;
}

void sqlist_creat1(sqlist** sq)
{

}

int sqlist_insert(sqlist* me, int i, datatype* data)
{
	if (me->last == DATASIZE - 1)
		return -1;

	if (i <0 || i > me->last + 1)
		return -2;

	//移动
	for (int j = me->last; j >= i; j--)
	{
		me->data[j + 1] = me->data[j];
	}

	me->data[i] = *data;
	me->last++;
	return 0;

}

//参数顺序表和需要删除元素的下标
int sqlist_delete(sqlist* me, int i)
{
	int temp;
	//顺序表位空
	if (sqlist_isempty(me) == 0)
	{
		fprintf(stderr, "顺序表为空!\n");
		return -1;
	}

	//下标i不合法
	if (i <0 || i >me->last)
	{
		fprintf(stderr, "下标不合法!\n");
		return -2;
	}

	//对元素进行删除
	for (int j = i; j < me->last; j++)
	{
		temp = me->data[i];
		me->data[j] = me->data[j + 1];

	}
	me->last--;
	return 0;
}

//找到返回下标,若没有找到返回-1
int sqlist_find(sqlist* me, datatype* data)
{
	if (sqlist_isempty(me) == 0)
	{
		return -1;
	}

	for (int i = 0; i <= me->last; i++)
	{
		if (me->data[i] == *data)
			return i;
	}
	return -1;
}

//判断是否为空
int sqlist_isempty(sqlist* me)
{
	if (me->last == -1)
		return 0;
	return 1;
}

//设置为空
int sqlist_setempty(sqlist* me)
{
	me->last = -1;
	return 0;
}

int sqlist_getnum(sqlist* me)
{
	return (me->last + 1);
}

void sqlist_display(sqlist* me)
{
	if (me->last == -1)
		return;

	for (int i = 0; i <= me->last; i++)
	{
		printf("%d ", me->data[i]);
	}
	printf("\n");
	return;
}


int sqlist_destroy(sqlist* me)
{
	free(me);
	return 0;
}

//把sq1合并到sq2上
int sqlist_union(sqlist* sq1, sqlist* sq2)
{
	int i = 0;

	for (i = 0; i <= sq1->last; i++)
	{
		if (sqlist_find(sq2, &(sq1->data[i])) < 0)
		{
			sqlist_insert(sq2, sq2->last + 1, &(sq1->data[i]));
		}

	}

	return 0;
}

main.c

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


int main()
{

	sqlist* sq = sqlist_creat();
	sqlist* sq2 = sqlist_creat();
	datatype arr[] = { 11,22,33,44,55 };
	datatype arr2[] = { 11,44,66,77,88 };
	int err,err2;
	if (sq == NULL || sq2 == NULL)
	{
		fprintf(stderr, "sqlist_creat() failed!\n");
		exit(1);
	}
	for (int i = 0; i < sizeof(arr) / sizeof(*arr); i++)
	{
		if ((err = sqlist_insert(sq, 0, &arr[i])) != 0 || (err2 = sqlist_insert(sq2, 0, &arr2[i])) != 0)
		{
			if (err == -1)
				fprintf(stderr, "The arr is full.\n");
			else if (err == 2)
				fprintf(stderr, "the pos you want to insert is wrong!\n");
			else
				fprintf(stderr, "ERROR!\n");
			exit(1);
		}
	}

	sqlist_display(sq);

	sqlist_delete(sq, 1);

	sqlist_display(sq);

	sqlist_union(sq, sq2);
	sqlist_display(sq2);

	sqlist_destroy(sq);

	exit(0);
}










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值