线性顺序表--基础数据结构(基于C)

线性结构-线性顺序表

  • 线性顺序表定义:用一组连续的存储单元(地址连续)依次存放线性表的各个数据元素。即:在顺序表中逻辑结构上相邻的数据元素,其物理位置也是相邻的。
  • 线性顺序表优缺点:
    优点:
    (1)无须为表示结点间的逻辑关系而增加额外的存储空间。
    (2)可以方便地随机存储表中的任一结点。
    缺点:
    (1)插入和删除平均须移动一半结点。
    (2)存储分配只能预先进行(静态)
              过大 浪费
              过小 溢出(动态分配可调整)
  • C语言实现
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100

typedef int  datatype;            //宏定义数据类型
typedef struct                   //宏定义结构体
{
	datatype  data[MAXSIZE];        //数据
    int length;                     //数据长度
}SqList;

SqList SqL;
datatype GetElement(SqList *L,int i);      //获取链表第i个内容
int SearchElement(SqList *L,datatype e);     //查看列表中是否存在存在某元素
int ListInsert(SqList *L,int loc,datatype x);             //插入元素到某个loc后
void LisDeletet(SqList* L,int loc);
void ListLength(SqList* L,int length);
void ShowSqlist(SqList* L);
int score[10]={77,88,99,56,87,90,22,87,90,56};


int main()
{

  int i,k,e;
  for (i=0;i<10;i++)
  {
	  SqL.data[i]=score[i];
	  SqL.length++;
  }
  //打印原始列表
  printf("original list\n");
  ShowSqlist(&SqL);
  //插入数据99
  e=99;
  k=ListInsert(&SqL,1,e);
  ShowSqlist(&SqL);
  //删除第10个元素
  LisDeletet(&SqL,10);
  ShowSqlist(&SqL);
  //获取链表第2个内容
  printf("链表第2个内容:");
  datatype ee;
  ee=GetElement(&SqL,1);
  printf("%2d\n",ee);
  //查看87在链表中的位置
  printf("查看87在链表中的位置:");
  int index=SearchElement(&SqL,87);
  printf("%2d\n",index);
  //查看链表长度
  int length;
  ListLength(&SqL,length);
  LisDeletet(&SqL,5);
  ListLength(&SqL,length);
  system("pause");
  return 0;
}

datatype GetElement(SqList *L,int i)
{
	return L->data[i];
}

int SearchElement(SqList *L,datatype e)
{
	for (int i=0;i<L->length;i++)
   {	
      if(i==L->length) 
      {
         printf("can't found the data\n");
         return(-1);
      }
      else
      {
         if(L->data[i]==e) 
         {
            return i;
         }
      }
   }
}
int ListInsert(SqList *L,int loc,datatype x)
{
   int i;
   if (L->length<0)
   {
      printf("表长错误\n");
      return(-1);
   }
   if (loc<1||loc>L->length+1)
   {
      printf("插入位置i不适当\n");
      return(-1);
   }
   for (i=L->length;i>loc;i--)
	   {L->data[i]=L->data[i-1];};
   L->data[i]=x;
   L->length++;
   printf("\nInsert success\n");
   return(0);
}

void LisDeletet(SqList* L,int loc)
{
   int i;
   if(loc<1||loc>L->length)
   { printf("Position error");
     return;
   }
   for(i=loc;i<=L->length;i++)
      {L->data[i]=L->data[i+1];};
   L->length--;
   printf("Delete success\n");
}

void ShowSqlist(SqList* L)
{
	int i;
	for (i=0;i<L->length-1;i++)
	{
		printf("%2d-->",L->data[i]);
		if (i%4==3) printf("\n");
	}
	printf("%2d\n",L->data[i]);
}
void ListLength(SqList* L,int length)
{
   length=L->length;
   printf("length=%d\n",length);
}

结果运行
在这里插入图片描述
能给你有所帮助就是我最大的荣誉 ! 不积硅步,无以至千里,加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值