1. 程式人生 > >資料結構之順序表的實現(C語言)

資料結構之順序表的實現(C語言)

實現程式碼:

#ifndef __LINEARLIST_H__
#define __LINEARLIST_H__
#include <malloc.h>
#include <stdio.h>

typedef struct 
{
	int* base;
	int size;
	int len;
}LinearList,* pList;

int initList(pList list, int size)
{
	if(size < 1)
		size=100;
	list->base = (int*) malloc(size*sizeof(int));
	if(!list->base)
		return 0;
	list->size = size;
	list->len = 0;
	return 1;
}
int listLength(pList list)
{
	return list->len;
}
int addTailData(pList list, int e)
{
	if(!list->base)
		return 0;
	list->base[list->len] = e;
	list->len++;
	return 1;
}
int getElem(pList list, int pos, int* e)
{
	if(pos<1 || pos>list->len || !list->base)
		return 0;
	*e = list->base[pos-1];
	return 1;
}
int listInsert(pList list,int pos, int e)
{
	int i=0;
	if(pos<1 || pos>list->len || !list->base || list->size<list->len+1)
		return 0;

	for(i=list->len+1; i>=pos; --i)
		list->base[i] = list->base[i-1];
	list->base[i]=e;
	list->len++;
	return 0;
}
int reverse(pList list)
{
	int i = 0;
	if(!list)
		return 0;
	for(i; i<list->len; ++i)
	{
		printf("%d ", list->base[i]);
	}
	printf("\n");
	return 1;
}
int listDelete(pList list, int pos, int* e)
{
	int i=pos-1;
	if(pos<1 || pos>list->len || !list->base)
		return 0;
	*e = list->base[i];
	for(i; i<list->len-1; ++i)
	{
		list->base[i] = list->base[i+1];
	}
	list->len--;
	return 1;
}
#endif //__LINEARLIST_H__

測試程式碼:

#include <stdio.h>
#include "Linearlist.h"
int main()
{
	int val = -1;
	LinearList list;
	initList(&list, 10);
	addTailData(&list, 1);
	addTailData(&list, 2);
	addTailData(&list, 3);
	reverse(&list);
	listInsert(&list, 1, 50);
	reverse(&list);
	getElem(&list, 2, &val);
	listInsert(&list, 3, 20);
	printf("%d \n", val);
	reverse(&list);
	listDelete(&list, 3, &val);
	printf("%d \n", val);
	reverse(&list);
	return 0;