顺序结构的数据链表,仍旧薄弱(照着大了一边)

main.c
//////////////////////////////////////////////////////////////////////////////////
#include<iostream>
#include"string"
#include"seqlist.h"
using namespace std;
//创建节点,遍历输出节点,删除节点
typedef struct Teacher
{
	int age;
	string name;

}Teacher;

//
//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);
int main()
{
	Teacher t1, t2, t3, t4;
	t1.age = 31;
	t2.age = 32;
	t3.age = 33;
	t4.age = 34;

	SeqList* list;
	Teacher *it;
	int reg;
	list = SeqList_Create(4);//顺序存储必须在先开辟内存。
	//进行到每一步,一定要验证
	if (list == NULL)
	{
		cout << "create fail \n";
		return 0;
	}

//int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);
//因为这里原来的式子node是一个指针,也就是地址,这里的也必须是指针类型的。

//	reg =  SeqList_Insert(list, (SeqListNode*)  t1, 0); 为什么这种的就不对呢?
	reg = SeqList_Insert(list, (SeqListNode*) &t1, 0);
	reg = SeqList_Insert(list, (SeqListNode*)&t2, 0);
	reg = SeqList_Insert(list, (SeqListNode*)&t3, 0);
	reg = SeqList_Insert(list, (SeqListNode*)&t4, 0);

	for (int i = 0; i < SeqList_Length(list); i++)
	{
		//SeqListNode* SeqList_Get(SeqList* list, int pos);
		Teacher *temp = (Teacher *)SeqList_Get(list, i);
		if (temp == NULL)
		{
			cout << " failed \n";
			return 0;
		}
		cout << temp->age << endl;
	}

	//SeqListNode* SeqList_Delete(SeqList* list, int pos);
	while (SeqList_Length(list))
	{
		SeqList_Delete(list, 0);
	}

	system("pause");

}

  

seqlist.h
///////////////////////////////////////////////////////////
#pragma once
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);

  

seqlist.c
////////////////////////////////////////////////
#include "seqlist.h"
#include<iostream>
#include"string.h"
typedef struct Tseqlist
{
	int length;
	int capacity;
	int *node;
}Tseqlist;

SeqList* SeqList_Create(int capacity)
{
	Tseqlist *tem = NULL;
	int ret = 0;
	tem = (Tseqlist *)malloc(sizeof(Tseqlist));
	if (tem == NULL)
	{

		return NULL ;
	}
	memset(tem, 0, sizeof(Tseqlist));
	tem->node = (int *)malloc(sizeof(int)*capacity);
	if (tem->node == NULL)
	{
		return NULL;
	}
	tem->capacity = capacity;
	tem->length = 0;

	return tem;
}
//释放前一步create创建的内存空间
void SeqList_Destroy(SeqList* list)
{
	Tseqlist *D_list = NULL;
	D_list = (Tseqlist *)list;
	if (D_list == NULL)
	{
		return;
	}
	if (D_list->node != NULL)
	{
		free(D_list->node);
	}
	free(D_list);
}
//清空就是回到初始状态  这种写法我看不懂,为什么呢? 这样子的话仅仅是自己创建的C_list被初始化,而实际的list依旧没有被初始化
//别人传来的一个seqlist 空类型,但是我知道其实是 Tseqlist类型的

void SeqList_Clear(SeqList* list)
{
	Tseqlist *C_list = NULL;
	C_list = (Tseqlist *)list;
	if (C_list == NULL)
	{
		return;
	}
	C_list->length = 0;
}

int SeqList_Length(SeqList* list)
{
	Tseqlist *C_list = NULL;
	if (list == NULL)
	{
		return -1;
	}
	C_list = (Tseqlist *)list;
	return (C_list->length);
}

int SeqList_Capacity(SeqList* list)
{
	Tseqlist *C_list = NULL;
	if (list == NULL)
	{
		return -1;
	}
	C_list = (Tseqlist *)list;
	return (C_list->capacity);
}

int SeqList_Insert(SeqList* list, SeqListNode* node1, int pos)
{
	Tseqlist *I_list ;
	if (list == NULL  ||  node1 == NULL  || pos  < 0 )
	{
		return -1;
	}
	I_list = (Tseqlist *)list;
	 //假设插入元素后,超出容量
	if (I_list->length > I_list->capacity)
	{
		printf("\n 输入的长度超过了容量 \n");
		return -1;
	}
	// 修正 假设插入的顺序在长度之外
	if (pos > I_list->length)
	{
		pos = I_list->length;
	}
	//正式的插入
	for (int i = I_list->length; i > pos; i--)
	{
		I_list->node[i] = I_list->node[i - 1];
	}
	I_list->node[pos] = (int ) node1;
	I_list->length++;

	return 0;
}

SeqListNode* SeqList_Get(SeqList* list, int pos)
{
	Tseqlist *I_list ;
	if (list == NULL || pos  < 0)
	{
		return NULL;
	}
	I_list = (Tseqlist *)list;

	return  (SeqListNode*)I_list->node[pos];
}

SeqListNode* SeqList_Delete(SeqList* list, int pos)
{
	Tseqlist *I_list ;
	if (list == NULL || list == NULL || pos  < 0)
	{
		return NULL;
	}
	I_list = (Tseqlist *)list;

	for (int i = pos; i < I_list->length; i++)
	{
		I_list->node[i] = I_list->node[i + 1];
	}
	I_list->length--;
	return NULL;
}

  

时间: 2024-10-17 01:49:17

顺序结构的数据链表,仍旧薄弱(照着大了一边)的相关文章

顺序结构与链式结构

摘抄自,严蔚敏<算法与数据结构> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

数据结构与算法 1 :基本概念,线性表顺序结构,线性表链式结构,单向循环链表

[本文谢绝转载] <大纲> 数据结构: 起源: 基本概念 数据结构指数据对象中数据元素之间的关系  逻辑结构 物理结构 数据的运算 算法概念: 概念 算法和数据结构区别 算法特性 算法效率的度量 大O表示法 时间复杂度案例 空间复杂度 时间换空间案例 1)线性表: 线性表初步认识: 线性表顺序结构案例 线性表顺序结构案例,单文件版 线性表的优缺点 企业级线性表链式存储案例:C语言实现 企业级线性表链式存储案例:C语言实现 单文件版 企业级线性表链式存储案例,我的练习  线性表链式存储优点缺点

java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制)

转载请注明出处(请尊重原创!谢谢~): http://blog.csdn.net/javazejian/article/details/53073995 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??这篇是数据结构与算法的第3篇,通过前两篇的介绍,对应顺序表和链表已有

顺序表与单链表的区别及优缺点

线性表之顺序表与单链表的区别及优缺点 尊重原创 -->原文链接 --> 侵权删 这里比较的是基于C语言实现的顺序表与单链表,与其他语言的实现可能会有差异,但我相信语言是相通的,它们的实现机制应该也差不多. 顺序表描述: 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素占用存储单元的长度. 单链表描述: 单链表

数据结构复习---顺序表和单链表

1.前言: 最近比较浮躁,想学习一门新的技术却总是浅尝辄止,遇到不懂的地方就想跳过去,时间长了,心态就有点崩了.静下心来,去喝了几碗心灵鸡汤.鸡汤博主感动到了我:"无专注,无风景.不要太贪心,一次只做一件事,而且只做最重要的事.".于是乎,我把家里翻了个底朝天,找到了我垫在床底下的<数据结构>这本书,觉得自己是时候静下心来好好复习一下基础了.今天刚看到顺序表和链表,把我的学习心得记录在这里.也希望自己能坚持,老老实实的把这本书复习完. 2.数据结构的重要性: 讲一门知识之前

线性表——顺序表与单链表学习小结

线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表.链表.栈.队列.字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线.但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储. 顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删查改. 链表 链表是一种物理存储结构上非连续.非顺序的存储结构,数据

详解Google-ProtoBuf中结构化数据的编码

原文转自:http://www.wuzesheng.com/?p=1258 本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf.因此,本文首先会介绍一些google protobuf相关的内容,让读者朋友对google protobuf有一个初步的印象,然后,再开始进入正题—-深入浅出地介绍google protobuf中用到的编码规则.下面言归正传,开始今天的话题. 1. Googl

算法之 线性表顺序结构

package math; import java.util.ArrayList; import java.util.List; //线性表顺序结构 public class LinearTable { public int len = 0; //线性表表长度 public List list; public int currentLen = 0; //构造方法,申请一个对应长度得 线性表 public LinearTable(int i){ this.list = new ArrayList(

数据结构实验报告-实验一 顺序表、单链表基本操作的实现

实验一    顺序表.单链表基本操作的实现   l  实验目的 1.顺序表 (1)掌握线性表的基本运算. (2)掌握顺序存储的概念,学会对顺序存储数据结构进行操作. (3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力. l  实验内容 1. 顺序表 1.编写线性表基本操作函数: (1)InitList(LIST *L,int ms)初始化线性表: (2)InsertList(LIST *L,int item,int rc)向线性表的指定位置插入元素: (3)DeleteList1