基于 Linux 的顺序表代码

/*************************************************************************
  > File Name: sqlist.c
  > Author: Wenfei6316
  > Mail: [email protected] 
  > Created Time: 2018年06月17日 星期日 18时03分34秒
 ************************************************************************/

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

#define MAXSIZE 25

typedef int data_t;
typedef struct
{
	data_t data[MAXSIZE];
	int len;
}SqNode, *Sqlist;

Sqlist CreateEmptySqlist(void);
void GetElem(Sqlist sqlist, int posi, data_t *value);
void PrintList(Sqlist sqlist);
void ListInsert(Sqlist sqlist, int posi, data_t value);
void ListDelete(Sqlist sqlist, int posi, data_t *value);

int main(int argc, const char *argv[])
{
	int i, posi = 3;
	data_t data;
	Sqlist sq;
	sq = CreateEmptySqlist();
	for (i=0; i<5; i++)
	{
		sq->data[sq->len] = i;
		sq->len++;
	}
	GetElem(sq, posi, &data);
	printf("data is %d\n", data);

	PrintList(sq);
	ListInsert(sq, 2, 13);
	PrintList(sq);

	ListDelete(sq, 3, &data);
	PrintList(sq);

	free(sq);

	return 0;
}

//创建空顺序表
Sqlist CreateEmptySqlist(void)
{
	Sqlist sq;
	sq = (Sqlist)malloc(sizeof(SqNode));
	if (sq == NULL)
	{
		perror("Create sequence list failed!\n");
		exit(EXIT_FAILURE);
	}

	sq->len = 0;

	return sq;
}

//获取顺序表元素
void GetElem(Sqlist sqlist, int posi, data_t *value)
{
	if (sqlist == NULL)
	{
		printf("Sequence list is error!\n");
		return ;
	}
	if (posi>sqlist->len || posi<0)
	{
		printf("Position is error!\n");
		return ;
	}
	*value = sqlist->data[posi];

	return ;
}

//遍历顺序表
void PrintList(Sqlist sqlist)
{
	int i, count = 0;
	if (sqlist == NULL)
	{
		printf("Sequence list error!\n");
		return ;
	}
	if (sqlist->len == 0)
	{
		printf("Sequence list is empty!\n");
		return ;
	}
	for (i=0; i<sqlist->len; i++)
	{
		printf("%2d  ", sqlist->data[i]);
		if (!(++count % 5))
			printf("\n");
	}
	if (count % 5)
		printf("\n");
}

//顺序表插入元素
void ListInsert(Sqlist sqlist, int posi, data_t value)
{
	int i;
	if (sqlist->len == MAXSIZE)
	{
		printf("Sequence list is full!\n");
		return ;
	}
	else if (posi<0 || posi>sqlist->len+1)
	{
		printf("Insert list error!\n");
		return ;
	}
	sqlist->len++;
	for (i=sqlist->len; i>posi; i--)
		sqlist->data[i] = sqlist->data[i-1];
	sqlist->data[i] = value;
	
	return ;
}

//顺序表删除元素
void ListDelete(Sqlist sqlist, int posi, data_t *value)
{
	int i;
	*value = 0;
	if (sqlist == NULL)
	{
		printf("Sequence list is empty!\n");
		return ;
	}
	if (posi<0 || posi>sqlist->len)
	{
		printf("List delete error!\n");
		return ;
	}
	*value = sqlist->data[posi];
	for (i=posi; i<sqlist->len; i++)
		sqlist->data[i] = sqlist->data[i+1];
	sqlist->len--;

	return ;
}


猜你喜欢

转载自blog.csdn.net/wenfei11471/article/details/80721076
今日推荐