码迷,mamicode.com
首页 > 其他好文 > 详细

静态单链表

时间:2015-06-25 09:05:50      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

最近在学习数据结构的单链表部分,于是写了一个静态单链表做练习。实现了对其初始化、添加、更改、删除等功能的实现。

"Seqlist.h"

#pragma once
#define __SEQ_LIST__
#ifdef __SEQ_LIST__

#include <stdio.h>
#include <assert.h>
#include <string.h>

#define MAXSIZE 100
typedef int DataType;

typedef struct SeqList
{
	DataType array[MAXSIZE];
	size_t size;
}SeqList;

typedef enum Tag
{
	TRUE,	// 真
	FALSE,	// 假
}Tag;

typedef struct FindRet
{
	Tag isFind;		// 是否找到的标示
	size_t index;	// 找到数据的下标
}FindRet;


void InitSeqList(SeqList* pSeq);
void PrintSeqList(SeqList* pSeq);

void PushBack(SeqList* pSeq, DataType x);//从尾部添加数据
void PopBack(SeqList* pSeq);//从尾部删除数据

void PushFront(SeqList* pSeq, DataType x);//从头部添加数据
void PopFront(SeqList* pSeq);//从头部删除数据

void Insert(SeqList* pSeq, size_t index, DataType x);//插入数据
void Modified (SeqList* pSeq, size_t index, DataType x );//修改数据
void Remove(SeqList* pSeq, size_t index);//删除数据

// 返回-1,表示查找失败。
// 返回>=0,表示查找成功,返回值表示查找到数据的下标。
FindRet Find(SeqList* pSeq, DataType x, size_t index);


#endif // __SEQ_LIST__


"Seqlist.c"

#include "Seqlist.h"
void InitSeqList(SeqList *pSeq)
{
	assert(pSeq);
	memset(pSeq->array, 0, MAXSIZE*sizeof(DataType));
	pSeq->size = 0;
}
void PrintSeqList(SeqList *pSeq)
{
	size_t i = 0;
	assert(pSeq);
	
	for (; i < pSeq->size; ++i)
	{
		printf("%d ", pSeq->array[i]);
	}
	printf("\n");
}
void PushBack(SeqList* pSeq, DataType x)
{
	assert(pSeq);
	if (pSeq->size>MAXSIZE - 1)
	{
		printf("array is full");
		return;
	}
	pSeq->array[pSeq->size++] = x;
}
void PopBack(SeqList* pSeq)
{
	assert(pSeq);
	if (pSeq->size < 1)
	{
		printf("array is empty");
		return;
	}
	--pSeq->size;
}
void PushFront(SeqList* pSeq, DataType x)
{
	int i = pSeq->size - 1;
	assert(pSeq);
	if (pSeq->size > MAXSIZE - 1)
	{
		printf("array is full");
		return;
	}
	for (; i >= 0; i--)
	{
		pSeq->array[i + 1] = pSeq->array[i];
	}
	pSeq->array[0] = x;
	++pSeq->size;
}
void PopFront(SeqList* pSeq)
{
	int i = 0;
	assert(pSeq);
	if (pSeq->size == 0)
	{
		printf("array is empty");
	}
	for (; i < (int)(pSeq->size); ++i)
	{
		pSeq->array[i - 1] = pSeq->array[i];
	}
	pSeq->size--;
}
void Insert(SeqList* pSeq, size_t index, DataType x)
{
	size_t end = pSeq->size;
	assert(pSeq);
	assert(index<=(pSeq->size));

	if (pSeq->size>MAXSIZE-1)
	{
		printf("array is full");
		return;
	}
	for (; end > index; --end)
	{
		pSeq->array[end] = pSeq->array[end - 1];
	}
	pSeq->array[index] = x;
	pSeq->size++;
}
void Modified(SeqList* pSeq, size_t index, DataType x)
{
	assert(pSeq);
	assert(index < pSeq->size);
	pSeq->array[index] = x;
}
void Remove(SeqList* pSeq, size_t index)
{
	assert(pSeq);
	assert(index < pSeq->size);
	for (; index < pSeq->size; ++index)
	{
		pSeq->array[index] = pSeq->array[index + 1];
	}
	pSeq->size--;
} 
FindRet Find(SeqList* pSeq, DataType x, size_t index)
{
	FindRet ret;
	assert(pSeq);
	for (; index < pSeq->size; ++index)
	{
		if (x == pSeq->array[index])
		{
			ret.isFind = TRUE;
			ret.index = index;
			printf("TRUE\n");
			return ret;
		}
	}
	ret.isFind = FALSE;
	return ret;
}

"main.c"

#include "Seqlist.h"


void Test1()
{
	SeqList s;
	InitSeqList(&s);
	PushBack(&s, 1);
	PushBack(&s, 2);
	PushBack(&s, 3);
	PushBack(&s, 4);

	PrintSeqList(&s);

	PopBack(&s);
	PopBack(&s);
	PrintSeqList(&s);
}

void Test2()
{
	SeqList s;
	InitSeqList(&s);
	PushFront(&s, 1);
	PushFront(&s, 2);
	PushFront(&s, 3);
	PushFront(&s, 4);
	PrintSeqList(&s);

	PopFront(&s);
	PrintSeqList(&s);
}
void Test3()
{
	SeqList s;
	InitSeqList(&s);
	PushBack(&s, 1);
	PushBack(&s, 2);
	PushBack(&s, 3);
	PushBack(&s, 4);
	Insert(&s, 1, 10);
	PrintSeqList(&s);

	Modified(&s, 1, 99);
	PrintSeqList(&s);

	Remove(&s, 3);
	PrintSeqList(&s);
}
void Test4()
{
	SeqList s;
	InitSeqList(&s);
	Insert(&s, 0, 0);
	Insert(&s, 1, 1);
	Insert(&s, 2, 2);
	Insert(&s, 3, 3);
	Find(&s, 2, 2);
	PrintSeqList(&s);
}

int main()
{
	Test1();
	printf("\n");
	Test2();
	printf("\n");
	Test3();
	printf("\n");
	Test4();
	getchar();
	return 0;
}

技术分享

静态单链表

标签:

原文地址:http://blog.csdn.net/lolita0917/article/details/46626317

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!