顺序线性表的实现及操作(C语言实现)

什么是顺序线性表.....自己百度。

头文件

2_1.h
#ifndef  _2_1_H
#define  _2_1_H
 
typedef void SeqList;
typedef void SeqListNode;

//创建线性表
SeqList * SeqList_Create(int capacity);

//销毁线性表
void SeqList_DesTroy(SeqList * list);

void SeqList_Clear(SeqList* list);

int SeqList_Length(SeqList* list);

int SeqList_Capacity(SeqList* list);

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);

SeqListNode* SeqList_Get(SeqList* list, int pos);

SeqListNode* SeqList_Delete(SeqList* list, int pos);



#endif

源文件:

// 顺序线性表.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <malloc.h>
#include <stdlib.h>
#include "2_1.h"

typedef unsigned int TSeqListNode;
typedef struct {
	int len;     //长度
	int capacity;//总长度
	TSeqListNode * node;//每个节点的指针
} TSeqList;

int main()
{

	
   SeqList* list = SeqList_Create(5);//创建线性表
    
    int i = 6;//赋值6个变量,已超过线性表最大值 5
    int j = 1;
    int k = 2;
    int x = 3;
    int y = 4;
    int z = 5;
    int index = 0;
    
    SeqList_Insert(list, &i, 7);	//将这6个变量插入线性表中
    SeqList_Insert(list, &j, 0);
    SeqList_Insert(list, &k, 0);
    SeqList_Insert(list, &x, 0);
    SeqList_Insert(list, &y, 0);
    SeqList_Insert(list, &z, 0);
	
    //遍历
    for(index=0; index<SeqList_Length(list); index++)
    {
        int* p = (int*)SeqList_Get(list, index);
        
        printf("%d  ", *p);
    }
    
    printf("\n");
    //删除操作
    while( SeqList_Length(list) > 0 )
    {
        int* p = (int*)SeqList_Delete(list, 0);
        
        printf("删除了: %d\n", *p);
    }
	SeqList_Clear(list);
    SeqList_DesTroy(list);
    
    system("pause");
	return 0;
}
//创建线性表
SeqList * SeqList_Create(int capacity)
{
	TSeqList* ret = NULL ;
	if(capacity >= 0)
	{
		ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode)*capacity);  //为线性表分配空间,包含结																					//构体和节点的总大小
	}
	if(NULL != ret)
	{
		ret->len = 0;
		ret->capacity = capacity;
		ret->node = (TSeqListNode*)(ret + 1);//将节点指向上述分配到的空间的后部分
	}
	return ret;
}
//销毁
void SeqList_DesTroy(SeqList * list)
{
	free(list);
}
//清空
void SeqList_Clear(SeqList* list)
{
	TSeqList * ret = (TSeqList*)list;
	if(NULL != ret)
	{
		ret->len = 0;
	}
}
//获得线性表的长度
int SeqList_Length(SeqList* list)
{
	TSeqList * ret = (TSeqList*)list;
	int len = -1;
	if(NULL != ret)
	{
		len = ret->len;
	}
	return len;
}
//线性表的总长度
int SeqList_Capacity(SeqList* list)
{
	TSeqList * ret = (TSeqList*)list;
	int capacity = -1;
	if(NULL != ret)
	{
		ret->capacity = capacity;
	}
	return capacity;
}
//插入
int SeqList_Insert(SeqList* list, SeqListNode* node, int pos)
{
	TSeqList * sList = (TSeqList*)list;
	int i,ret = -1;
	if((sList != NULL) &&(pos >= 0) && sList->capacity >= sList->len+1)
	{
		if(pos >= sList->len)
		{
			pos = sList->len;
		}
		for(i = sList->len; i > pos; i--)
		{
			sList->node[i] = sList->node[i-1];
		}
		sList->node[i] = (TSeqListNode)node;
		++sList->len;
		ret = 1;
	}

	return ret;
}
//获得指定位置的节点
SeqListNode* SeqList_Get(SeqList* list, int pos)
{
	TSeqList * sList = (TSeqList*)list;
	TSeqListNode* node = NULL;
	if(NULL != sList && pos>=0 && pos < sList->len)
	{
		node = (TSeqListNode*)sList->node[pos];
	}
	return node;
}
//删除
SeqListNode* SeqList_Delete(SeqList* list, int pos)
{
	TSeqList * sList = (TSeqList*)list;
	SeqListNode * node = SeqList_Get( list, pos);
	int i;


	if(sList != NULL && pos >= 0 && pos< sList->len)
	{
		 for( i=pos+1; i<sList->len; i++)
		 {
			sList->node[i-1] = sList->node[i];
		 }
		  sList->len--;
	}
	return node;
}

运行结果:

4  3  2  1  6
删除了: 4
删除了: 3
删除了: 2
删除了: 1
删除了: 6
请按任意键继续. . .

如有什么错误,望不吝告知。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值