通过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;
}