1线性表的定义

线性表是具有相同特性的数据元素的一个有限序列

a1(线性起点),a2,a3......an(线性终点)n为元素总个数(n=0时为空表) 除开第一个元素或最后一个元素外都有一个直接前驱与直接后继。

2.线性表的顺序表示和实现

线性表的顺序表示又称为顺序存储结构或顺序映像

顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构

3.顺序表的基本操作及完整代码

a.顺序表的定义

//创建一个线性表
#define MAXSIZE 10
typedef struct SequentiaList{int data[MAXSIZE];int actuallength;
}SequentiaList; 

b.顺序表的初始化

void  InitList (SequentiaList *paralist)
{paralist->data=(int*)malloc(sizeof(int)*MAXSIZE);int i;paralist->actuallength=0;return L;
}

c.创造一个线性表

SequentiaList createList(SequentiaList *paralist,int str[],int n)
{if(n>MAXSIZE){printf("NOT enougth space to allocata")//空间分配存在问题return 0; }int j;for(j=0;j<n;j++){paralist->data[j]=a[j];}paralist->length=n;return 1;} 

d.销毁线性表

//销毁线性表
void DestroyList(SequentiaList *paralist)
{if(paralist->actuallength==0){printf("This list is empty");}if(paralist->data)//线性表存在 {paralist->data=NULL;}paralist->actuallength=0;//销毁成功
}

e.清空线性表

//清空线性表
void ClearList(SequentiaList *paralist)
{paralist->actuallength=0;//让线性表长度为零 } 

f.求线性表长度

//求线性表长度int LengthList(SequentiaList *paralist)
{return paralist->length;
} 

g.判断线性表是否为空

//判断是否为空
int Isempty(Sqlist *paralist)
{if(paralist->actuallength==0)return 1;elsereturn 0;
}

h.获取线性表某个位置的数

//获取线性表某个位置的数
int GetElem(SequentiaList *paralist,int i)
{int e;if(i<=paralist->actuallength&&i>0)//如果位置合理{e=paralist->data[i-1];return e;}elsereturn 0;//illegal position} 

i.按值查找

//按值查找
int LocateElem(SequentiaList paralist,int e)
{int i;for(i=0;i<paralist.actuallength;i++){if(paralist.data[i]==e)return i+1;}elsereturn 0;//查找失败 } 

j.按位查找

//按位置查找int LocateElem(SequentiaList paralist,int i){if(i<paralist.actuallength)return paralist->data[i-1];} 

k.插入元素

//插入元素void InsertElem(SequentiaList *paralist,int i,int e)//在第I个位置插入元素 {int j=0;if(i<1||i>paralist->actuallength)//插入位置非法 return 0;if(paralist->actuallength>MAXSIZE)//数组长度已满 return 0;for(j=paralist->actuallength;j>=i;j--){paralist->data[j]=paralist->data[j-1];//剩下元素后移 }paralist->data[i-1]=e;paralist->actuallength++;`} 

l.删除一个元素

//删除一个元素void DeleteList(SequentiaList *paralist,int i){int j=0;if(i<1||i>paralist->actuallength)return 0;if(paralist->actuallength>MAXSIZE)return 0;for(j=i;j<paralist->actuallength;j++){paralist->data[j-1]=L->data[j];//被删除元素前移 }paralist->actuallength--;} 

m.获得前驱元素

//获得前驱元素 int preNumber(SequentiaList *paralist,int i){if(i>paralist->length&&i<1)//位置非法,超越长度或第一个元素没有前驱 {printf("illegal position\n");return 0;}elsereturn paralist->data[i-2]; }

n.获得后继元素

//获得后继元素 int nextNumber(SequentiaList *paralist,int i){if(i>paralist->length){//超越长度或最后一个位置没有后继元素 printf("illegal position\n");return 0;}elsereturn paralist->data[i];}

完整代码

#include <stdio.h>
#include <malloc.h>#define LIST_MAX_LENGTH 10/*** Linear list of integers. The key is data.*/
typedef struct SequentialList {int actualLength;int data[LIST_MAX_LENGTH]; //The maximum length is fixed.
} *SequentialListPtr;/*** Output the list.*/
void outputList(SequentialListPtr paraList) {for(int i = 0; i < paraList->actualLength; i ++) {printf("%d ", paraList->data[i]);}// Of for iprintf("\r\n");
}// Of outputList/*** Output the memeory for the list.*/
void outputMemory(SequentialListPtr paraListPtr) {printf("The address of the structure: %ld\r\n", paraListPtr);printf("The address of actualLength: %ld\r\n", &paraListPtr->actualLength);printf("The address of data: %ld\r\n", &paraListPtr->data);printf("The address of actual data: %ld\r\n", &paraListPtr->data[0]);printf("The address of second data: %ld\r\n", &paraListPtr->data[1]);
}// Of outputMemory/*** Initialize a sequential list. No error checking for this function.* @param paraListPtr The pointer to the list. It must be a pointer to change the list.* @param paraValues An int array storing all elements.*/
SequentialListPtr sequentialListInit(int paraData[], int paraLength) {SequentialListPtr resultPtr = (SequentialListPtr)malloc(sizeof(struct SequentialList));for (int i = 0; i < paraLength; i ++) {resultPtr->data[i] = paraData[i];}// Of for iresultPtr->actualLength = paraLength;return resultPtr;
}//Of sequentialListInit/*** Insert an element into a sequential linear list.* @param paraListPtr The pointer to the list. It must be a pointer to change the list.* @param paraPosition The position, e.g., 0 stands for inserting at the first position.* @param paraValue The value to be inserted.*/
void sequentialListInsert(SequentialListPtr paraListPtr, int paraPosition, int paraValue) {// Step 1. Space check.if (paraListPtr->actualLength >= LIST_MAX_LENGTH) {printf("Cannot insert element: list full.\r\n");return;}//Of if// Step 2. Position check.if (paraPosition < 0) {printf("Cannot insert element: negative position unsupported.");return;}//Of ifif (paraPosition > paraListPtr->actualLength) {printf("Cannot insert element: the position %d is bigger than the list length %d.\r\n", paraPosition, paraListPtr->actualLength);return;}//Of if// Step 3. Move the remaining part.for (int i = paraListPtr->actualLength; i > paraPosition; i --) {paraListPtr->data[i] = paraListPtr->data[i - 1];}//Of for i// Step 4. Insert.paraListPtr->data[paraPosition] = paraValue;// Step 5. Update the length.paraListPtr->actualLength ++;
}// Of sequentialListInsert/*** Test the insert function.*/
void sequentialInsertTest() {int i;int tempArray[5] = {3, 5, 2, 7, 4};printf("---- sequentialInsertTest begins. ----\r\n");// Initialize.SequentialListPtr tempList = sequentialListInit(tempArray, 5);printf("After initialization, the list is: ");outputList(tempList);// Insert to the first.printf("Now insert to the first, the list is: ");sequentialListInsert(tempList, 0, 8);outputList(tempList);// Insert to the last.printf("Now insert to the last, the list is: ");sequentialListInsert(tempList, 6, 9);outputList(tempList);// Insert beyond the tail.printf("Now insert beyond the tail. \r\n");sequentialListInsert(tempList, 8, 9);printf("The list is:");outputList(tempList);// Insert to position 3.for (i = 0; i < 5; i ++) {printf("Inserting %d.\r\n", (i + 10));sequentialListInsert(tempList, 0, (i + 10));outputList(tempList);}//Of for iprintf("---- sequentialInsertTest ends. ----\r\n");
}// Of sequentialInsertTest/*** Delete an element from a sequential linear list.* @param paraListPtr The pointer to the list. It must be a pointer to change the list.* @param paraPosition The position, e.g., 0 stands for inserting at the first position.* @return The deleted value.*/
int sequentialListDelete(SequentialListPtr paraListPtr, int paraPosition) {// Step 1. Position check.if (paraPosition < 0) {printf("Invalid position: %d.\r\n", paraPosition);return -1;}//Of ifif (paraPosition >= paraListPtr->actualLength) {printf("Cannot delete element: the position %d is beyond the list length %d.\r\n", paraPosition, paraListPtr->actualLength);return -1;}//Of if// Step 2. Move the remaining part.int resultValue = paraListPtr->data[paraPosition];for (int i = paraPosition; i < paraListPtr->actualLength; i ++) {paraListPtr->data[i] = paraListPtr->data[i + 1];}//Of for i// Step 3. Update the length.paraListPtr->actualLength --;// Step 4. Return the value.return resultValue;
}// Of sequentialListDelete/*** Test the delete function.*/
void sequentialDeleteTest() {int tempArray[5] = {3, 5, 2, 7, 4};printf("---- sequentialDeleteTest begins. ----\r\n");// Initialize.SequentialListPtr tempList = sequentialListInit(tempArray, 5);printf("After initialization, the list is: ");outputList(tempList);// Delete the first.printf("Now delete the first, the list is: ");sequentialListDelete(tempList, 0);outputList(tempList);// Delete to the last.printf("Now delete the last, the list is: ");sequentialListDelete(tempList, 3);outputList(tempList);// Delete the second.printf("Now delete the second, the list is: ");sequentialListDelete(tempList, 1);outputList(tempList);// Delete the second.printf("Now delete the 5th, the list is: ");sequentialListDelete(tempList, 5);outputList(tempList);// Delete the second.printf("Now delete the (-6)th, the list is: ");sequentialListDelete(tempList, -6);outputList(tempList);printf("---- sequentialDeleteTest ends. ----\r\n");outputMemory(tempList);
}// Of sequentialDeleteTest/*** Locate an element in the list.* @param paraListPtr The pointer to the list.* @param paraValue the indicated value.* @return The position of the value, or  -1 indicating not exists*/
int locateElement(SequentialListPtr paraListPtr, int paraValue) {for (int i = 0; i < paraListPtr->actualLength; i ++) {if (paraListPtr->data[i] == paraValue) {return i;}// Of if}//Of for ireturn -1;
}// Of locateElement/*** Get an element in the list.* @param paraListPtr The pointer to the list.* @param paraPosition The given position.* @return The position of the value, or  -1 indicating not exists*/
int getElement(SequentialListPtr paraListPtr, int paraPosition) {// Step 1. Position check.if (paraPosition < 0) {printf("Invalid position: %d.\r\n", paraPosition);return -1;}//Of ifif (paraPosition >= paraListPtr->actualLength) {printf("Cannot delete element: the position %d is beyond the list length %d.\r\n", paraPosition, paraListPtr->actualLength);return -1;}//Of ifreturn paraListPtr->data[paraPosition];
}// Of locateElement/*** Clear elements in the list.* @param paraListPtr The pointer to the list.* @return The position of the value, or  -1 indicating not exists*/
void clearList(SequentialListPtr paraListPtr) {paraListPtr->actualLength = 0;
}// Of clearList/**The entrance.*/
void main() {sequentialInsertTest();sequentialDeleteTest();
}// Of main

线性表的顺序存储结构的基本操作相关推荐

  1. 线性表的顺序存储结构及基本操作

    学习书籍<大话数据结构>,自学完后,总结一下,以后也好复习 ,欢迎互相交流. 线性表的基本操作功能如下: InitList(*L):          初始化操作,建立一个空的线性表L L ...

  2. python线性表顺序存储实现_数据结构——基于C的线性表的顺序存储结构的基本操作的实现...

    /*** *SeqList.c *Copyright (c) 2015, XZG. All rights reserved. *Purpose: * 线性表顺序存储结构的创建.数据插入.数据获取.获取 ...

  3. 数据结构和算法:(3)3.1线性表的顺序存储结构

    -----------------------1.线性表基础操作------------------------ 线性表:(List)由零个或多个数据元素组成的有限序列. 首先他是一个序列,元素之间是 ...

  4. 线性表之顺序存储结构

    第三章 线性表:零个或多个数据元素的有限序列. 若将线性表标记为(a1,a2,...ai-1,ai,ai+1,...,an), 当i=1,2,...n-1时,ai有且仅有一个直接后继, 当i=2,3, ...

  5. 线性表的顺序存储结构——顺序表

    什么是线性表? 线性表简称表,是n(n>=0)个具有相同类型的数据元素的有限序列,线性表中数据元素的个数称为线性表的长度,长度为0的表称为空表. 什么是顺序表? 线性表的顺序存储结构称为顺序表. ...

  6. 实验报告微型计算机拆卸顺序表,实验一线性表的顺序存储结构实验报告页.doc...

    实验一线性表的顺序存储结构实验报告页.doc 1 攀 枝 花 学 院 实 验 报 告 实验课程 数据结构 实验项目线性表的顺序存储 实验日期 系 班级 姓名 学号 同组人 指导老师 成绩 实验目的1. ...

  7. 线性表的顺序存储结构

    一,什么是线性表 零个或多个数据元素的有限序列 说明: 它是一个序列,即,元素之间是有顺序的.(第一个元素无前驱,最后一个元素无后继,其他每个元素有且只有一个前驱和后继) 线性表强调有限. 二,数学语 ...

  8. C++实现线性表的顺序存储结构

    C++实现线性表的顺序存储结构 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表的特点 除 ...

  9. C和C++线性表的顺序存储结构

    C和C++线性表的顺序存储结构 基本概念 设计与实现 优点和缺点 基本概念 设计与实现 插入元素算法 判断线性表是否合法 判断插入位置是否合法 把最后一个元素到插入位置的元素后移一个位置 将新元素插入 ...

最新文章

  1. qstring 属于元数据类型吗_数据仓库的“元数据管理”
  2. 【Scratch】青少年蓝桥杯_每日一题_4.25_说日子
  3. 提质升级·万祥军:中国与拉美谋定国际农民丰收节贸易会
  4. 8篇SCI,总影响因子46.464!这位博士,毕业后带着女友一起援疆!
  5. 【opencv学习】【读取图像、视频、摄像头】
  6. 一条SQL查询语句是如何执行的? MySql杂谈
  7. sentinel接入网关应用_阿里sentinel配合gateway 网关限流
  8. 使用根轨迹分析的动态补偿设计
  9. 物体检测中的mAP含义
  10. 计算机应用历年高考真题,春季高考历年真题-2013年天津市春季高考计算机试卷...
  11. [图像处理][Matlab] fspecial函数详解
  12. 计算机组装考核记录表,电脑组装与维护考核方案.doc
  13. php电子商务的服装库存管理系统
  14. 白嫖银行?普通人为数不多的机会
  15. Jsp制作企业后台数据库管理系统
  16. 【C++】小而快的Ninja
  17. Android Things:来跑一个Demo耍耍
  18. 系统总结深度学习的主要的损失函数和优化器
  19. JAVA7所有版本下载地址 JRE jre jdk JDK
  20. linux交互式进程初始化失败怎么办,“登录进程初始化失败 交互式登录进程初始化失败”的解决办法...

热门文章

  1. Squish for Qt:为Qt应用量身打造的自动化测试工具
  2. 分享Atom必备插件
  3. python火灾检测
  4. 【机器学习笔记4】逻辑回归模型
  5. 做题记录 Newcoder 逆序对 (组合、快速幂、快速乘
  6. shell脚本中的冒号作用
  7. 硕士毕业3年辞职考计算机博士,硕士毕业四年,我是如何考上博士的
  8. 防止windows 10系统崩溃的几种操作
  9. 亚马逊多账号注册如何防止关联
  10. 学顶教育:初级会计师领取证书有关事项