数据结构(顺序表)(C语言)

 通过C语言实现数据结构线性表基本功能:

  • 头文件:
//SquenceList.h
#ifndef _SEQUENCELIST_H
#define _SEQUENCELIST_H

#define SIZE    10
#define SUCCESS 10000
#define FAILURE 10001
#define TRUE    10002
#define FALSE   10003

typedef int Elemtype;

typedef struct SequenceList
{
	int length;
	Elemtype *data;
}SeList;

void print(Elemtype e);
int SequenceInit(SeList *list);
int SequenceInsert(SeList *list, int p, Elemtype e);
int SequenceLength(SeList list);
int SequenceEmpty(SeList list);
int GetElem(SeList list, int p, Elemtype *e);
int SequenceTraverse(SeList list, void(*p)());
int SequenceSearch(SeList list, Elemtype e);
int SequenceDelete(SeList *list, int p, int *e);
int SequenceClear(SeList *list);
int SequenceDestory(SeList *list);

#endif
  • 主要功能函数如下:
//SequenceList.c
#include <stdio.h>
#include <stdlib.h>
#include "SequenceList.h"


int SequenceInit(SeList *list)
{
	if(list == NULL)
	{
		return FAILURE;
	}

	list->length = 0;
	list->data = (Elemtype *)malloc(sizeof(Elemtype)*SIZE);

	return SUCCESS;
}


int SequenceInsret(SeList *list, int p, Elemtype e)
{
	int i;
	if( list == NULL        || 
	   p < 1                || 
	   list->length >= SIZE ||
	   p > list->length + 1 ||
	   list->data == NULL )
	{
		return FAILURE;
	}

	for(i = 0; i < list->length - p + 1; i++)
	{
		list->data[list->length - i] = list->data[list->length - i - 1];
	}
	list->data[p] = e;
	list->length++;

	return SUCCESS;
}


int SequenceLength(SeList list)
{
	return list.length;
}

int SequenceEmpty(SeList list)
{
	return (list.length == 0) ? TRUE : FALSE;
}

int GetElem(SeList list, int p, Elemtype *e)
{
	if(p < 1 || p > list.length)
	{
		return FAILURE;
	}
	
	*e = list.data[p-1];

	return SUCCESS;
}


int SequenceTraverse(SeList list, void (*p)())
{
	if(p == NULL)
	{
		return FAILURE;
	}
	int i;
	for(i = 0; i < list.length; i++)
	{
		p(list.data[i]);
	}
	return SUCCESS;
}


int SequenceSearch(SeList list, Elemtype e)
{
	int i;
	for(i = 0; i < list.length; i++)
	{
		if(e == list.data[i])
		{
			return i+1;
		}
	}
	return FAILURE;
}


int SequenceDelete(SeList *list, int p, int *e)
{
	int i;
	if(NULL == list || p < 1 || p > list->length)
	{
		return FAILURE;
	}

	*e = list->data[p - 1];
	for(i = 0; i < list->length - p; i++)
	{
		list->data[p + i -1] = list->data[p + i];
	}
	list->length--;

	return SUCCESS;
}


int SequenceClear(SeList *list)
{
	if(NULL == list)
	{
		return FAILURE;
	}

	list->length = 0;
	return SUCCESS;
}


int SequenceDestory(SeList *list)
{
	if(NULL == list)
	{
		return FAILURE;
	}

	list->length = 0;
	free(list->data);
	list->data = NULL;
	return SUCCESS;
}
  •  主函数调用情况:
//TestSequenceList.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "SequenceList.h"

void print(Elemtype e)
{
	printf("%d ", e);
}

int main()
{
	int ret, i;
	SeList list;

	ret = SequenceInit(&list);
	if(SUCCESS == ret)
	{
		printf("Init success!\n");
	}
	else
	{
		printf("Init failure!\n");
	}

	srand(time(NULL));

	for(i = 1; i <= 8; i++)
	{
		ret = SequenceInsret(&list, i, rand()%10);
		if(SUCCESS == ret)
		{
			printf("Insret success!\n");
		}
		else
		{
			printf("Insret failure!\n");
		}
	}

	ret = SequenceLength(list);
	printf("Length is %d.\n", ret);

	ret = SequenceEmpty(list);
	if(TRUE == ret)
	{
		printf("Is empty.\n");
	}
	else
	{
		printf("Not empty.\n");
	}

	Elemtype e;
	int p = 2;

	ret = GetElem(list, p, &e);
	if(FAILURE == ret)
	{
		printf("GetElem Failure!\n");
	}
	else
	{
		printf("%dth is %d.\n", p, e);
	}

	ret = SequenceTraverse(list, print);
	if(SUCCESS == ret)
	{
		printf("SequenceTraverse Success.\n");
	}
	else
	{
		printf("SequenceTraverse Failure.\n");
	}

	ret = SequenceSearch(list, e+1);
	if(FAILURE == ret)
	{
		printf("Not have this elem.\n");
	}
	else
	{
		printf("%d is %dth.\n", e+1, ret);
	}

	p = 3;
	ret = SequenceDelete(&list, p, &e);
	if(SUCCESS == ret)
	{
		printf("Delete %d success.\n", e);
	}
	else
	{
		printf("Delete failure.\n");
	}
	
	ret = SequenceTraverse(list, print);
	if(SUCCESS == ret)
	{
		printf("SequenceTraverse Success.\n");
	}
	else
	{
		printf("SequenceTraverse Failure.\n");
	}

	ret = SequenceClear(&list);
	if(SUCCESS == ret)
	{
		printf("Clear success.\n");
	}
	else
	{
		printf("Clear failure.\n");
	}

	ret = SequenceDestory(&list);
	if(SUCCESS == ret)
	{
		printf("Destory success.\n");
	}
	else
	{
		printf("Destory failure.\n");
	}


	return 0;
}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值