1.1顺序表基本操作的设计与实现

实现顺序表的基本操作,包括顺序表的建立,查找,求长度,查找前驱,插入,删除,输出等函数

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -1

#define List_INIT_SPACE 100    //存储空间初始分配量
#define List_INC_SPACE 10      //存储空间分配增量

typedef int ElemType;
typedef struct
{
	ElemType *elem;              //存储空间基址
	int length;                  //当前长度
	int listsize;				//当前分配的存储容量(以sizeof(ElemType)为单位)
}Sq_List;

/****---------------------------------------------------------------------------------****/
//函数名:   Sq_ListInit(Sq_List &l)
//参数:     (传入)Sq_List L,顺序表结构体L,存储线性表相关信息(&相当于传入L的地址)
//返回值:    int型,返回1表示创建成功,0表示失败
//功能:      初始化一个空顺序表
/*****--------------------------------------------------------------------------------****/

int Sq_ListInit(Sq_List &L)
{
	//在内存中分配空间
	L.elem = (ElemType*)malloc(List_INIT_SPACE*sizeof(ElemType));
	if(!L.elem) exit(OVERFLOW);   //存储分配失败
	//构造一个空线性表L
	L.length = 0;
	L.listsize = List_INIT_SPACE;   //初始存储容量
	return OK;
}//函数Sq_listInit结束

/****----------------------------------------------------------------------****/
//函数名: LocateElem(Sq_List L, ElemType e)
//参数:  (传入)Sq_List L,顺序表
//		   (传入)ElemType e,定位元素
//返回值: int型,返回定位位置,0表示失败
//功能:   在顺序表中定位元素
/****----------------------------------------------------------------------****/

int LocateElem(Sq_List L, int e)
{
	int i = 1;
	//定义线性表指针
	int * p = L.elem;
	//查找元素e
	while(i < L.length && *p++ != e)
	{
		++i;
	}
	if(i <= L.length)
	{
		return i;
	}
	else
	{
		return ERROR;
	}
}
//求顺序表的长度
int GetListLength(Sq_List L)
{
	return L.length;
}

/****---------------------------------------------------------------------****/
//函数名:   Sq_listInsert(Sq_List &L, int i, ElemType e)
//参数:    (传入)Sq_List &l   顺序表
//         (传入)int i 插入位置
//         (传入)ElemType e 插入元素
//返回值:  1表示成功,0表示操作失败
//功能:      在顺序表L中的第i个位置前插入新元素e
//备注:     i的和合法值为1<= i <= 线性表长度+1
/****---------------------------------------------------------------------****/

int Sq_ListInsert(Sq_List &L, int i, ElemType e)
{
	//判断位置是否合法
	if(i < 1 || i > L.length+1)
	{
		cout <<"i 的值不合法!" << endl;
		return 0;
	}
	//超出空间进行再分配
	if(L.length >= L.listsize)
	{
		int *newspace;
		newspace = (ElemType*) realloc(L.elem,(L.listsize+List_INC_SPACE)*sizeof(ElemType));
		if(!newspace) exit(OVERFLOW);     //存储分配失败
		L.elem = newspace;                //新基址
		L.listsize += List_INC_SPACE;     //增加存储容量
	}
	int *p, *q;                           //定义指向线性表位置i和尾的指针
	q = &(L.elem[i-1]);                   //q指针指向插入位置i的前一个
	for(p = &(L.elem[L.length-1]); p >= q; --p)
	{
		*(p+1) = *p;                       //插入元素之后的元素右移
	}
	*q = e;                                //把元素e放在位置i处
	++L.length;                            //线性表长度增加1
	return OK;
}//Sq_ListInsert结束

/****------------------------------------------------------------------****/
//函数名:   Sq_listDelete(Sq_list &L, int i, ElemType &e)
//参数:    (传入)Sq_list &L 顺序表
//          (传入)int i   删除位置
//          (传出)ElemType &e删除元素
//返回值:   1表示成功,0表示操作失败
//功能:     在顺序线性表L中删除第i个元素,用e返回其值
//备注:     i的合法取值为1 <= i <= 线性表长度
/****------------------------------------------------------------------****/

int Sq_listDelete(Sq_List &L, int i, ElemType &e)
{
	//判断位置是否合法
	if(i < 1|| i > L.length+1)
	{
		cout << " i的值不合法!" << endl;
		return 0;
	}
	int *p, *q;                   //定义指向线性表位置i和尾的指针
	p = &(L.elem[i-1]);           //p为被删除元素的位置
	e = *p;                       //取删除元素的值
	q = L.elem + L.length -1;     //q指针指向线性表最后一个元素
	for(++p; p <= q; ++p)
	*(p-1) = *p;                 //被删除元素之后的元素左移
	 --L.length;                  //线性表长度减1
	 return OK;
}//函数Sq_ListDelete结束

//-------------------testing program---------------------------

int main()
{
	Sq_List R;    //定义实参
	int flag;
	//为了判断调用成功与否,可以检查flag的值,或者见插入操作的调用方法
	//if(flag == 1) cout << "成功";
	//else cout << "失败";
	flag = Sq_ListInit(R);

	// 调用方法
	int i = 1;
	int elem;
	cout << "the length of current list is " << GetListLength(R) << endl;
	cout << "input the element: ";
	cin >> elem;
	if(Sq_ListInsert(R, i, elem))   cout << "successed! " << endl;
	cout << "the length of current list is " << GetListLength(R) << endl;
	//Sq_ListInsert(R, i, elem);      //或者直接调用
	return 0;
}
时间: 2024-11-11 22:56:56

1.1顺序表基本操作的设计与实现的相关文章

顺序表 基本操作

1 实验1 顺序表基本操作 2 3 实验目的 4 1. 熟悉C语言的上机环境,掌握C语言的基本结构. 5 2. 会定义线性表的顺序存储结构. 6 3. 熟悉对顺序表的一些基本操作和具体的函数定义. 7 注意事项 8 在做第一次“数据结构”课程实验之前,要在硬盘上建立好自己的工作目录,专门来存储你所做的实验程序及相关信息,以后每次做实验都采用这个目录. 9 实验内容 10 该程序的功能是对元素类型为整型的顺序表进行一些操作.该程序包括顺序表结构类型的定义以及对顺序表操作的具体的函数定义和主函数.

顺序表基本操作函数总结

/*************************************************************************************//*   顺序表基本操作函数/*------------------------------------------------------------------------------------------------------------------------------/*  /* Date: 2016年10月

1.顺序表基本操作

(ps上了大学,一开始不知道自己专业是学编程的,等到半路知道自己是学编程的时候,又不知道到底该怎么学,该学什么.一直处于一个很尴尬的境地. 大一的时候玩了玩pangolin,学了html和一点点java就想搞sql注入.想想当时挺好玩的,也算是步入了编程这条不归路吧. 到了大二开始学java,当时很懵逼为什么jdk要配置环境变量,环境变量又什么鬼,eclipse又是啥,myeclipse又TM是啥... 到了大三,学完了框架,ssh没怎么写,主要用ssm写了几个项目,感觉就是增删改查,顶多加个s

[BS]线性表-顺序表基本操作

线性表分为顺序表和链表. 顺序表的基本操作如下: #include <stdio.h> #include <stdlib.h> /*---------------------------------------------*/ #define INIT_VOLUME_OF_LIST 100 #define INCRESE_VOLUME 10 /*---------------------------------------------*/ typedef char ElemType

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制)

转载请注明出处(请尊重原创!谢谢~): http://blog.csdn.net/javazejian/article/details/53073995 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??这篇是数据结构与算法的第3篇,通过前两篇的介绍,对应顺序表和链表已有

数据结构(一)线性表——顺序表

一.顺序表基本操作的实现 通常把顺序存储结构实现的线性表称为顺序表. 1.状态类型Status的定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef char ElemType; 2.顺序表类型SqList的定义 #define ListSpaceIncr 20 typedef stru

C语言实现顺序表(数据结构线性表部分)

-------------------------------------------- 顺序表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 概念图 模块设计:伪代码写的非常差劲- -见谅 //初始化顺序表(InitList) 使用malloc函数

简单顺序表的插入,删除,指定位置,指定元素的插入删除操作

头文件 SeqList.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<stdio.h> #include<string.h> #include<assert.h> #define MAX_SIZE 10 typedef int DataType; typedef unsigned int size_t; typedef struct SeqList { DataType array[MAX_SIZE]; s