顺序线性表的删除算法:
算法部分:
Status ListDelete_Sq ( SqList &L, int i, ElemType &e ) {
// 在顺序线性表L中删除第 i 个元素,并用 e 返回其值,1≤i ≤ListLength_Sq (L)
if ( ( i < 1 ) || ( i > L.length ) ) return ERROR; // i 值不合法
p = &( L.elem [ i-1 ] ); // p 为被删除元素的位置
e = *p; // 被删除元素的值赋给 e
q = L.elem + L.length – 1; // 表尾元素的位置
for ( ++p; p <= q; ++p ) *(p-1) = *p; // 被删除元素之后的元素左移
--L.length; // 表长减 1
return OK;
} // ListDelete_Sq
C程序源代码部分:
//ListDelete_Sq.cpp
//Delete the NO.i Element of Sq_List and get the value
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
//#define LIST_INIT_LENGTH 10 //LIST_INIT_LENGTH is the Init_Define_Length of Sq_List
//int array[LIST_INIT_LENGTH]={5,8,12,18,25,30,37,46,51,89};
//array use to assign init value of SqList
#define ElemType int
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
{ int *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList &L) //InitList_Sq() function
{ //Inititial a Sq_List
L.elem=(int *)malloc(LIST_INIT_SIZE *sizeof(int));
if (!L.elem) return(0);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return(1);
}//end of InitList_Sq() function
void ListDelete_Sq(SqList &L,int i, int &e) //ListDelete_Sq() function
{
int *p,*q;
if((i<1)||(i>L.length))
{ cout<<i<<" is OverFlow !"<<endl;
exit(0);
}
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for (++p;p<=q;++p)
*(p-1)=*p;
--L.length;
cout<<"Success to Delete Sq_list !"<<endl;
}//end of ListDelete_Sq() function
void main() //main() function
{
SqList L;
int e;
int i,j;
//L.elem=array;
//L.length=LIST_INIT_LENGTH;
cout<<"ListDelete_Sq.cpp"<<endl<<"================="<<endl<<endl;
InitList_Sq(L);
cout<<"Please input the Length of Demo SqList L: <eg. 5> ";
cin>>L.length;
cout<<"Please input the data of Demo SqList L: <eg. {34,54,30,2,40,...}> "<<endl;
for(j=0;j<L.length;j++)
cin>>L.elem[j];
cout<<endl;
cout<<"Success to create a SqList:"<<endl;
cout<<"Please input the NO.i element of Sq_List to delete: <eg. 3> ";
cin>>i;
ListDelete_Sq(L,i,e);
cout<<"The SqList After Delete is: ";
for(j=0;j<L.length;j++)
cout<<L.elem[j]<<" ";
cout<<endl<<"...OK...!"<<endl;
getch();
}//end of main() function
分享到:
相关推荐
在本资源中,我们主要探讨的是线性表在C语言中的实现及相关算法。 1. **线性表的定义与特性**:线性表是一种线性结构,每个元素有一个前驱元素和一个后继元素,除了第一个元素没有前驱,最后一个元素没有后继。这种...
本篇文章将深入探讨如何使用C语言来实现顺序线性表,包括其基本操作,如创建、插入数据、获取数据、删除数据、获取存放的数据量、清空线性表以及销毁线性表。 顺序线性表是由一组具有相同类型元素构成的序列,这些...
在本压缩文件中,包含了多种线性表实现的算法,覆盖了单链表、循环链表、顺序表以及队列等核心内容。下面将对这些知识点进行详细的阐述。 1. **单链表**: - 单链表是一种动态数据结构,每个节点包含数据和指向下...
在这个场景中,我们关注的是C语言实现的顺序线性表,由严蔚敏教授的经典教材《数据结构》中的内容作为指导。顺序线性表是指线性表的元素在内存中是连续存储的,便于进行快速访问。 首先,我们需要了解线性表的节点...
此程序采用单链表作为线性表的实现方式,它是一种动态数据结构,允许在运行时添加或删除元素。 首先,让我们了解链表的基本概念。链表不同于数组,它的元素不是在内存中连续存储的。每个链表节点包含两部分:数据域...
在这个"C语言数据结构线性表实验"中,我们将深入探讨两种实现线性表的方法:顺序表和链表。 1. **顺序表**: - **定义**:顺序表是将数据元素存储在一块连续的内存区域中,每个元素都有一个固定的索引位置。 - **...
《数据结构与算法(C语言版)》是一本深入讲解数据结构和算法的教材,课程的课后习题提供了丰富的实践机会,帮助学习者巩固理论知识并提升编程技能。以下是部分习题答案的关键知识点: 1. **数据结构概述** - 数据...
在计算机科学中,线性表可以采用顺序存储或链式存储两种方式。在这个问题中,我们关注的是链式存储,具体是单链表的实现,用C语言编写。 单链表是一种线性表的链式存储结构,每个节点包含数据域和指针域,指针域...
因此,当线性表需要插入或删除元素时,如果数组已满或不满,可能需要重新分配内存,这在C语言中通常涉及指针和动态内存管理。 实验代码"SqList_C_array"中的"SqList"很可能代表顺序表(Sequential List),这是...
在C语言中实现线性表,通常使用数组或链表作为底层数据组织方式。下面我们将深入探讨线性表的相关知识点。 **一、线性表的基本操作** 1. **查找**:在线性表中查找某个特定元素,通常有两种方法。对于顺序存储...
在实际应用中,线性表的链式存储结构特别适合动态变化大的场景,因为插入和删除操作只需改变相邻节点的指针,而顺序存储结构在插入和删除时可能需要移动大量元素。而在空间利用率和访问效率方面,顺序存储结构通常...
本话题将深入探讨线性表的顺序存储结构及其在C语言中的算法实现,包括线性表的输入输出、插入、删除以及长度和置空操作。 1. **线性表的顺序存储结构** 在顺序存储结构中,线性表的元素在内存中以数组的形式存储,...
本文档为《数据结构与算法(C语言版)》课后习题答案,涵盖了数据结构和算法的基础知识点,包括数据元素、数据项、集合结构、线性结构、树形结构、图形结构、顺序存储、链式存储、有穷性、确定性、可行性、输入、输出...
线性表具有顺序特性,即每个元素都有一个前驱元素和一个后继元素,除了第一个元素没有前驱,最后一个元素没有后继。 ### 线性表的定义 1. **基本概念**:线性表中的元素按照位置关系依次排列,可以通过下标进行访问...
该系统利用顺序存储结构来组织和管理数据,适用于在校大学生学习数据结构与算法时进行实践操作。以下是文档中提及的关键知识点: 1. 数据结构定义:程序首先定义了通讯录项的结构体(DataType),用于存储个人联系...
线性表的基本操作包括插入、删除、查找等操作。 线性表的实现方式有两种:顺序映像和链式映像。顺序映像是将数据元素存储在连续的存储单元中,而链式映像是将数据元素存储在不连续的存储单元中,并使用指针来连接...
在本题中,我们关注的是如何使用C语言来实现线性表的一些基本操作,包括添加元素(增)、删除元素(删)、修改元素(改)以及查找元素(查)。C语言以其简洁而强大的特性,成为了实现此类算法的理想选择。 首先,...
电子版教材《数据结构(C语言描述)》由斯庆巴拉编写,深入浅出地介绍了数据结构的基本概念、原理和算法。书中涵盖了线性表、栈、队列、树、图等基本数据结构,以及排序和查找算法等内容。通过C语言的实现,读者能够...