算法部分:
顺序线性表的插入算法
Status ListInsert_sq ( SqList &L, int i, ElemType e ) {
// 在顺序线性表 L 中第 i 个位置之前插入新的元素 e,1≤i≤ListLength_Sq (L) + 1
if ( i < 1 || i > L.length + 1) return ERROR; // i 值不合法
if ( L.length >= L.listsize ) { // 当前存储空间已满,增加分配
newbase = ( ElemType * ) realloc ( L.elem, ( L.listsize + LISTINCREMENT ) * sizeof ( ElemType ) );
if ( ! Newbase ) exit ( OVERFLOW ); // 存储分配失败
L.elem = newbase; // 新基址
L.listsize + = LISTINCREMENT; // 增加存储容量
} // if 语句结束
q = &( L.elem [ i-1] ); // q 为插入位置
for ( p = & ( L.elem [ L.length – 1 ] ); p >= q; -p )
*(p+1) = *p; // 插入位置及之后的元素右移
*q = e; // 插入 e
++L.length; // 表长增 1
return OK;
} // ListInsert_Sq
C源程序:
//ListInsert_sq.cpp
//This program is to insert a element into Sqlist
# include <malloc.h>
# include <iostream.h>
# include <conio.h>
# define LIST_INIT_SIZE 100
# define LIST_INIT_LENGTH 10
# define LISTINCREMENT 10
# define OK 1
# define ERROR 0
typedef struct SqList //define structure SqList
{ int *elem;
int length;
int listsize;
}SqList;
int ListInsert_sq(SqList &L,int i,int e)//ListInsert_sq()
{ if(i<1||i>L.length+1) //i (location) is illegal
{ cout <<"Initial failure!"<<endl;
getch();
return (ERROR);
}
if(L.length>=L.listsize) //insert into the end of the Sqlist
{ int *Newbase;
Newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!Newbase)
{ cout<<"Overflow!"<<endl;
getch();
return (ERROR);
}
L.elem=Newbase;
L.listsize+=LISTINCREMENT;
}
int *p,*q;
q=&(L.elem[i-1]); //q point at the element before the inserted one
for(p=&(L.elem[L.length-1]);p>=q;--p) //move the element
*(p+1)=*p;
*q=e;
++L.length;
return (OK);
} //ListInser_sq() end
void main() //main() function
{ int i,e,j;
SqList list;
list.length=LIST_INIT_LENGTH;
list.listsize=LIST_INIT_SIZE;
int array[11]={5,8,12,18,25,30,37,46,51,89};
list.elem=array;
cout<<endl<<endl<<"ListInsert_sq.cpp";
cout<<endl<<"=================";
cout<<endl<<endl<<"The old Sqlist is : ";
for(j=0;j<10;j++)
cout<<array[j]<<" ";
cout<<endl<<endl<<"Please input the location to insert (1 to 11) : ";
cin>>i;
while(i<1||i>11)
{ cout<<endl<<"Please input the location to insert (1 to 11): ";
cin>>i;
}
cout<<"Please input the integer to insert (eg,58) : ";
cin>>e;
if(ListInsert_sq(list,i,e)) //call ListInsert_sq()
{ cout<<endl<<"The new Sqlist is : ";
for(j=0;j<=10;j++)
cout <<array[j]<<" ";
}
cout<<endl<<endl<<"...OK!...";
getch();
} //main() end
分享到:
相关推荐
本篇文章将深入探讨如何使用C语言来实现顺序线性表,包括其基本操作,如创建、插入数据、获取数据、删除数据、获取存放的数据量、清空线性表以及销毁线性表。 顺序线性表是由一组具有相同类型元素构成的序列,这些...
顺序线性表是一种基本的数据结构,它在计算机科学中扮演着重要的角色,特别是在数据存储和算法实现方面。本文将深入探讨顺序线性表的概念、特点、操作以及在实际编程中的应用。 顺序线性表,顾名思义,是数据元素...
在本项目中,我们使用 C++ 实现了一个基于顺序线性表的数据结构,并且支持从文本文件读取数据,以及插入和删除元素的操作。 1. **顺序线性表**:顺序线性表是线性表的一种存储方式,其中元素在内存中按其逻辑顺序...
在本主题中,我们将深入探讨顺序线性表的建立、插入和删除操作。 首先,建立顺序线性表通常涉及到初始化一个具有固定容量的数组。在描述中提到,线性表的初始尺寸设为10,这意味着我们预分配了一个能容纳10个元素的...
### 数据结构:顺序线性表的初始化、插入与输出(C/C++) #### 知识点解析 在计算机科学中,数据结构是组织和存储数据的一种特定方式,它允许高效地进行数据访问和修改。顺序线性表是一种基本的数据结构,它通过一...
但是,顺序线性表在插入或删除元素时可能面临效率问题,特别是当操作发生在表的中间或开头时,因为这可能需要移动大量元素。 **链式线性表**则不同,它不依赖于元素在内存中的连续位置。每个元素(称为节点)包含两...
为了实现顺序线性表的功能,代码中定义了一系列函数来完成初始化、创建、显示、插入、删除等操作。 - **初始化** (`init`): 初始化线性表,将线性表的长度设为0。 - **创建** (`creat_list`): 创建一个新的顺序...
总的来说,这个实验报告详细介绍了如何使用顺序线性表数据结构来实现基本的线性表操作,包括创建、查询、插入、删除和显示元素。这种基础的操作对于理解数据结构和算法至关重要,是计算机科学教育中的核心内容。
本篇将详细阐述标题和描述中提到的几种线性表排序算法,包括插入排序、希尔排序、冒泡排序、快速排序、堆排序以及归并排序。 1. **插入排序**: 插入排序是一种简单直观的排序算法,它的工作原理是通过构造一个...
### 顺序存储结构线性表的插入与删除 #### 知识点概述 在计算机科学领域,线性表是数据结构中最基本的数据组织形式之一,它由一系列具有相同特性的数据元素组成,这些元素之间存在着一种一对一的关系。线性表可以...
在本文件中,我们主要讨论了三种线性表操作的算法:合并线性表、有序线性表的合并以及顺序线性表的插入。 **例1:合并LA、LB中的元素到LA中** 这个算法的目标是将线性表LB中的所有元素添加到线性表LA中,同时确保...
在本压缩文件中,包含了多种线性表实现的算法,覆盖了单链表、循环链表、顺序表以及队列等核心内容。下面将对这些知识点进行详细的阐述。 1. **单链表**: - 单链表是一种动态数据结构,每个节点包含数据和指向下...
在第i个位置前插入新元素ListInsert_Sq; 删除给定位置i的元素(位置删除)ListDelete_Sq 删除顺序表中所有值为给定值的元素(值删除)ListDeleteElem_Sq 输出顺序表的内容ListPrint_Sq; 合并两个顺序表,即将一个...
7. **文件中的“第2章-线性表”**:这部分内容可能详细讲解了线性表的概念、特性,以及顺序存储和链式存储的实现方式,包括各种操作的算法描述和示例,可能会包含程序代码实例,帮助理解并实践线性表的算法。...
在这个场景中,我们关注的是C语言实现的顺序线性表,由严蔚敏教授的经典教材《数据结构》中的内容作为指导。顺序线性表是指线性表的元素在内存中是连续存储的,便于进行快速访问。 首先,我们需要了解线性表的节点...
本话题将深入探讨线性表的顺序存储结构及其在C语言中的算法实现,包括线性表的输入输出、插入、删除以及长度和置空操作。 1. **线性表的顺序存储结构** 在顺序存储结构中,线性表的元素在内存中以数组的形式存储,...
顺序线性表是指在内存中连续分配存储空间的数据结构,通常用数组来表示。在报告中提到的`DestroyList(SqList &L)`函数,其主要功能是销毁顺序线性表。这个函数会释放表L所占用的内存空间,确保在程序运行过程中不会...
* 插入算法:插入算法可以使用指针来访问数组中的元素,并将插入位置后的元素右移。 * 删除算法:删除算法可以使用指针来访问数组中的元素,并将删除位置后的元素左移。 * 查找算法:查找算法可以使用指针来访问数组...
- **排序操作**:对线性表进行排序,常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序等。 6. **算法效率分析**:在C语言中,不同实现方式和操作对时间和空间复杂度有不同的影响。例如,数组...
这个“线性表算法总集”很可能包含了与线性表相关的各种操作和算法,如插入、删除、查找、排序等。 1. **数组实现的线性表**:在内存中连续分配空间,便于随机访问,但插入和删除可能涉及大量元素的移动。数组实现...