第三章线性表之一切从增删改查开始


                      首先来一点点的概念

                       一,一两个重要的概念

                             关于概念的学习提示:看看就好,后面你熟练了再返回来看,或者当你学习了java,c++的STL之后回来看这一章的时候,你会发现原来所有的一切容器,早在一百多年前,计算机专家就已经有了描述,原来一切封装都有一定的原则,原来学习了这个课程之后,一切的容器都有一模一样的规则!!!还是老话我很排斥概念,不过有的概念是必须知道的,有点印象之后,后面学东西会有突然的顿悟,好了,开始吧,废话很多了。

                       概念1

                        线性表的特点:(1)存在唯一的一个被称为“第一个”的数据元素

                                               (2)存在唯一的一个被称为"最后一个"的数据元素

                                               (3)除第一个之外,集合中的每个元素只有一个前驱(前驱:就好像排队一样,你个子比较矮,你只看到前面哪个人排在你前面,再前面的被那个高的挡住了)

                                               (4)除了最后一个之外,集合中的每个元素均只有一个后继(后继:一样还是因为你个子矮,你只看到你后面排了谁,再后面的被挡住了)

                   二,线性表的顺序存储结构

#define MAXSIZE 50
typedef struct
{
	int data[MAXSIZE];
	int length; 
}List;


 

                       前面讲了一堆都不到肉,到底什么是线性表?讲得简单一点就是一对简单数据类型的组合,那什么是顺序存储结构?书上说是存在计算机存储器的一块连续的存储空间,如果还没有入门计算机组成原理的,可能对这句话晕忽忽的,其实用一个简单点的表示方法就是数组啦,一个接着一个像排队一样,有人来插队了,怎么办?大家都往后退一步有人离开了,怎么办?大家都往前挪一步这就是顺序存储结构的特点了。

                       下面我们来定义一个顺序存储结构的存储类型,脑子里一定要有排队的概念   

 

                       说明:上面的存储结构中的data就是这个队了,这个队只能排50个人,length就是现在已经有多少个人在排队

关于这个数据结构我们要提供几个全局的方法,首先,安排所有人要买东西先排队,所以我们要先腾出一块地方给人排队(初始化),队里一个人离开了,就删除它(删除),队里来一个人靠关系来插队了就加入它(插入),没东西卖了,就解散这个队伍(销毁)

好了下面动手这个过程

                       初始化:

                       

void InitList(List *&list)
{
	list =(List *)malloc(sizeof(List)); 
	memset(list->data,0,sizeof(list->data));
	list->length=0; 
} 

                     插入:
 

void ListInsert(List *list,int index,int value)
{   
       int *ptrBegin= list->data; 
       int *ptrEnd = ptrBegin+MAXSIZE-1;
       int *ptrIndex=ptrBegin+index; 
       if(ptrEnd>=ptrIndex&&ptrIndex>=ptrBegin)
	   { 
	       while(ptrEnd>ptrIndex)
		   {
		  
		   	   *ptrEnd=*(ptrEnd-1); 
		   	    ptrEnd--; 
		   }
		   *ptrIndex=value;
		   list->length++; 
	   }	
} 


                    删除:

int ListDelete(List *list,int index)
{
    int *ptrBegin= list->data; 
	int *ptrIndex=list->data+index;
	int *ptrEnd=list->data+MAXSIZE-1;
	int e = list->data[index]; 
  	if(ptrEnd>=ptrIndex&&ptrIndex>=ptrBegin)
	{ 
		while(ptrIndex<ptrEnd)
		{
			*ptrIndex=*(ptrIndex+1);
			ptrIndex++;	
		}
		list->length--;
		return e;
	} 
	return 0; 
	 
} 


                 销毁:

 

void ListDesotry(List * &list)
{
	free(list); 
} 


                  为了方便大家copy玩一下,贴出整体的代码,不过本人的代码也没有高效率,主要为了清晰易懂,大家研究研究,有bug多提提啦!

 

#include<stdio.h>
#include<malloc.h>
#include<string.h> 
#define MAXSIZE 50
typedef struct
{
	int data[MAXSIZE];
	int length; 
}List; 

void InitList(List *&list)
{
	list =(List *)malloc(sizeof(List)); 
	memset(list->data,0,sizeof(list->data));
	list->length=0; 
} 

void ListInsert(List *list,int index,int value)
{   
       int *ptrBegin= list->data; 
       int *ptrEnd = ptrBegin+MAXSIZE-1;
       int *ptrIndex=ptrBegin+index; 
       if(ptrEnd>=ptrIndex&&ptrIndex>=ptrBegin)
	   { 
	       while(ptrEnd>ptrIndex)
		   {
		  
		   	   *ptrEnd=*(ptrEnd-1); 
		   	    ptrEnd--; 
		   }
		   *ptrIndex=value;
		   list->length++; 
	   }	
} 

int ListDelete(List *list,int index)
{
    int *ptrBegin= list->data; 
	int *ptrIndex=list->data+index;
	int *ptrEnd=list->data+MAXSIZE-1;
	int e = list->data[index]; 
  	if(ptrEnd>=ptrIndex&&ptrIndex>=ptrBegin)
	{ 
		while(ptrEnd>ptrIndex)
		{
			*ptrIndex=*(ptrIndex+1);
			ptrIndex++;	
		}
		list->length--;
		return e;
	} 
	return 0; 
	 
} 

void ListDesotry(List * &list)
{
	free(list); 
} 

int main()
{
   List *list;	
   InitList(list); 

   for(int i=0;i<4;i++)
   {
   	 ListInsert(list,i,i);
   } 
   ListDelete(list,3);
   for(int i=0;i<list->length;i++)
   {
   	printf("%d\t",list->data[i]); 
   } 
   ListDesotry(list); 
    printf("\n"); 
   return 0;	
} 


                       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值