线性表(数组)

// ArrayList.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#include "stdio.h"   //#define MAXNUM 100 //顺序表中最大元素的个数




struct SeqList
{
  int MAXNUM; 
  int n;           //存放线性表中现有元素的个数,随着元素的增加个数是动态变化的
  int * element ; //DateType element[];其实本质也是指针类型       
};

typedef struct SeqList * PSeqList; // PSeqList是 SeqList的指针的类型




//创建空顺序表 

PSeqList createNullList_seq(int m)
{
      PSeqList palist=(PSeqList)malloc(sizeof(struct SeqList));
      if(palist!=NULL)
      {
              palist->element=(int *)malloc(sizeof(int)*m);
              if(palist->element)
              {
                palist->MAXNUM=m;//设置了MAXNUM
                palist->n=0;
                return (palist);
              } 
              else
                 free(palist);        
      }


      printf("Out of space!!\n");
      return NULL;
         
}
//数据的输入
void input_SeqList(PSeqList palist)
{
	int count=0;

	for(int i=0;i<palist->MAXNUM;i++)
	{
		scanf("%d",&(palist->element[i]));
		palist->n++;
		if(palist->element[i]==0)
			break;
		
		
	}
}


//遍历
void traversal(PSeqList palist)
{
	for(int i=0;i<palist->n;i++)
	{
		printf("%d\n",palist->element[i]);
	}

}

//判断线性表是否为空 为空就返回1,否则返回0,为空就返回真 
int isNullList_seq(PSeqList palist)
{
  return (palist->n==0);    
} 
//查找某个元素在线性表中的位置 

int locate_seq(PSeqList palist,int x)
{
  int q;
  for(q=0;q<palist->n;q++)
	  if(palist->element[q]==x)
		  return (q);

  return (-1);
}



//如果插入数据标志是p 那么是在p-1和p之间插入一个数值,也是p-1之后插入一个数,也是从前往后数第P个数之后插入一个

int insertpre_seq(PSeqList palist,int p,int x)
{
   //在第p个数之后插入元素x
	int q;
	if(palist->n >=palist->MAXNUM)
	{
		printf("Overflow!\n");
		return (0);
	  
	}

	if( isNullList_seq(palist) )
	{
		palist->element[0]=x;
		//数据插入以后,一定要更新n的值

		palist->n=1;

		return (1);
	}

	if(p<0||p>palist->n)
	{
	  printf("Not exist!\n");
	  return (0);
	}




	
	//特殊情况排除以后,考虑正常情况
	for(q=palist->n-1;q>=p;q--)
	      palist->element[q+1]=palist->element[q];


	

	palist->element[p]=x;

	palist->n+=palist->n;


	return (1);
}


//删除下标为p的元素

int deleteP_seq(PSeqList palist,int p)
{
	if(p<0||p>palist->n-1)
	{
	  printf("不存在这样的下标");
	  return (0);
	}

	for(int i=p;i<palist->n-1;i++)
	      palist->element[i]=palist->element[i+1];

	palist->n-=palist->n;

	return (1);
    

}




main()
{
	PSeqList palist= createNullList_seq(100);
	input_SeqList(palist);
	traversal(palist);
	system("pause");
      
} 





你可能感兴趣的:(线性表)