算法部分:
顺序线性表的插入算法
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
分享到:
相关推荐
顺序存储结构线性表的插入与删除 设线性表中元素类型为整型,且L=(10,25,52,09,31,88,26,44,50,78),请把上述算法用C或C++实现,并验证程序的正确性。程序结构提示如下:
在第i个位置前插入新元素ListInsert_Sq; 删除给定位置i的元素(位置删除)ListDelete_Sq 删除顺序表中所有值为给定值的元素(值删除)ListDeleteElem_Sq 输出顺序表的内容ListPrint_Sq; 合并两个顺序表,即将一个...
线性表的输入输出,插入删除,以及长度和置空操作。附带实验报告。
线性表的插入,删除,查找,具有一定的意义哦/为兄
线性表的顺序存储,此程序主要实现线性表的顺序存储,有C++语言实现,还是比较轻易看得懂的!
线性表的顺序表示和插入、删除、归并C语言代码实现。根据严蔚敏编的C语言版程序编写。
顺序表、链表的基本算法插入、删除、建立、查找
设顺序表L是递增有序表,编写一个算法将x插入L中,使L仍然有序。如果是链表表示,是否可以实现以上操作,如果可能,编写一个算法予以实现。
1、选择顺序或链式存储结构实现线性表的基本操作 2、采用顺序或链式存储方式存储线性表,在此基础上实现线性表的各个操作,以及线性表的合并操作
2,掌握顺序表的基本操作,插入,删除,查找,以及有序顺序表的合并等算法的实现 二,实验内容 1,顺序表基本操作的实现 [问题描述] 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素...
假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B ? 实验2:单链表基本操作 一、 实验目的 1. 学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义...
用C实现,数据结构线性表的顺序和链式实现.
使用C++类模板实现了线性表的顺序存储结构,类中包含了线性表的常用方法:向线性表中插入一个元素、删除一个元素、清空线性表、获取一个元素、获取线性表长度、获取线性表的容量等。大致实现了STL中的线性表基本功能...
顺序表c语言程序,实现了顺序表算法的程序实现!!
3. 解决约瑟夫问题:假设有n个人按1、2、3、…、n的顺序围成一圈,现在,从第s个人开始按1、2、3、…、m的顺序报数,数到m的人出圈,接着从出圈的下一个人开始重复此过程,直到所有人出圈为止。试用循环链表解决这个...
(1)创建一个顺序表,存放在数组 A[N]中,元素的类型为整型,设计算法调整 A,使其左边的所有元素小于 0,右边的所有元素大于 0(要求算法的时间复杂度和空间复杂度均为 O(n))。 (2)建立一个循环单链表,其节点...
首先,逐行读取指定文件中的数据,并进行解析后保存在顺序表中。其中,文件中每行数据格式为“学号,姓名,年龄”,比如“SA10225048,[yyw1] 张三,24”。 (提示:采用顺序表结构时,顺序表中每个表元素包含三类信息...
使用软件为dev c++,使用c语言,用计算机类书籍《数据结构》中介绍的线性表中的顺序存储结构,建立了一个学生年龄表,可以实现基本的 插入 查找 删除 遍历,各个功能函数写有注释,方便阅读。
【数据结构】线性表顺序表(全)测试代码用C语言C++实现动态及静态顺序表的定义、插入、删除 定义线性表节点的结构.pdf
【数据结构作业一】写出顺序表的结构体类型定义及查找、插入、删除算法,并以顺序表作存储结。 定义线性表节点的结构.pdf