顺序表实操

顺序表的结构在内存中表示为一段连续区域.所以顺序表的维护实际上是对内存一段连续内存的维护。其根本保证在插入,删除元素后顺序表组织在内存中仍是连续性的。因此它的优点是:定位速度快;不足处:编辑顺序表需要进行多次移动元素.

使用 Turboc2 环境.

#include <stdio.h>
/*
1.初使化顺序表
2.销毁顺序表
3.添加元素
4.插入元素
5.删除元素
6.查询指定元素值索引
*/
typedef struct node
{
 int *ele;
 int size;
 int length;
} NODE;


/*初使化顺序表*/
int IniList(NODE *L,int size)
{  /* *L:顺序表 size: 顺序表大小 */
 L->ele = (int *)malloc(size * sizeof(int)); 
 if(L->ele == NULL) return 0;
 L->length = 0;
 L->size = size;
 return 1;
}

/*返回第一个等于data值元素的位序; *index >= 1 */
int SearchElemAt(NODE L,int data,int *index)
{
 int i;
 for(i = 0; i < L.length ; i++)
 {
  if(L.ele[i] == data)
  {
   *index = i + 1;
   return 1;
  }
 }

 return 0;
}


/*注销顺序表*/
void DestroyList(NODE *L)
{
 free(L->ele);
 L->ele = NULL;
 L->length = L->size = 0;
}


/*判断顺序表是否满栈*/
int IsFull(NODE L)
{
 return L.length == L.size;
}

/*判断顺序表是否为空表*/
int IsEmpty(NODE L)
{
 return L.length == 0;
}

/*插入元素到顺序表末尾*/
int AddElem(NODE *L,int data)
{
 if(IsFull(*L)) return 0;
 L->ele[L->length] = data;
 L->length++;
 return 1;
}

/*删除顺序表*/
int DeleteListAt(NODE *L,int index)
{/* index :删除元素位序. 1<= index <= L->length */
 int k;
 if(index < 1 || index > L->length ) return 0;
 for(k = index - 1 ; k < L->length - 1 ; k++)
 {
  L->ele[k] = L->ele[k+1];
 }

 L->length--;
 return 1;
}

/*插入元素到指定位序*/
int InsertElemAt(NODE *L,int index,int data)
{/* index :插入位序 1<= index <= L->length; data:插入元素数值*/
 int k;
 if(IsFull(*L)) return 0;
 if(index < 1 || index > L->length) return 0;
 for(k = L->length ; k > index-1 ; k--)
 {
  L->ele[k] = L->ele[k-1];
 }

 L->ele[index-1] = data;
 L->length++;
 return 1;
}

/*遍历顺序表*/
void foreach(NODE L)
{
 int k;
 for(k = 0 ; k < L.length ; k++)
 {
  printf("/n %d",L.ele[k]);
 }
}

/*升序插入元素*/
int InsertElemSort(NODE *L,int data)
{
 int k;
 if(IsFull(*L)) return 0;

 if(IsEmpty(*L))  /*如果是空表则直接在末尾添加元素*/
 {
  return AddElem(L,data);
 }

 for(k = 0 ; k < L->length ; k++)
 {
  if(L->ele[k] > data)
  {
   break;
  }
 }

 if(k == L->length) /*整表元素均小于 data,在末尾添加元素*/
  return AddElem(L,data);

 /*指定位序表加元素*/
 return InsertElemAt(L,k+1,data);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值