`

线性表

 
阅读更多

头文件List.h

#ifndef __LIST_H__
#define __LIST_H__

#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100 //线性表初始化长度
#define LISTINCREMENT 10	//线性表增长长度

typedef int ElemType;
typedef int Status;
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1


typedef struct{
	ElemType *elem;	//存储空间基址
	int length;		//当前长度
	int listsize;	//当前分配的存储空间
} SqList;

void showMenu();

Status InitList(SqList &L);

void showList(SqList &L);

Status ListInsert(SqList &L,int i,ElemType e);

Status ListDelete(SqList &L,int i,ElemType &e);

#endif

 

实现文件List.cpp

#include "List.h"

int main(){
	int cmd;
	SqList L;
	int i;
	ElemType e;
	showMenu();
	scanf("%d",&cmd);
	while(cmd){
		switch(cmd){
		case 1:
			InitList(L);
			break;
		case 2:
			showList(L);
			break;
		case 3:break;
		case 4:
			printf("输入要插入的位置和数据:");
			scanf("%d,%d",&i,&e);
			while(i<1||i>(L.length+1)){
				getchar();
				printf("输入要插入的位置和数据:");
				scanf("%d,%d",&i,&e);
			}
			ListInsert(L,i,e);
			break;
		case 5:
			printf("输入要删除的位置:");
			scanf("%d",&i);
			while(i<1||i>(L.length+1)){
				getchar();
				printf("输入要删除的位置:");
				scanf("%d",&i);
			}
			ListDelete(L,i,e);
			break;
		case 6:break;
		default:
			exit(-1);
			break;
		}
		showMenu();
		scanf("%d",&cmd);
	}
	return 0;
}

void showMenu(){
	char *str="\t\t************************";
	printf("%s\n",str);
	printf("\t\t1.初始化一个空线性表\n");
	printf("\t\t2.显示线性表\n");
	printf("\t\t3.清空线性表\n");
	printf("\t\t4.插入元素\n");
	printf("\t\t5.删除元素\n");
	printf("\t\t0.退出\n");
	printf("%s\n",str);
}

//
Status InitList(SqList &L){
	//构造一个空的L
	L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
	if(!L.elem)return OVERFLOW;//申请内存失败
	L.length=0;//初始化为链表长度为0
	L.listsize=LIST_INIT_SIZE;//初始化链表容量
	return OK;
}

void showList(SqList &L){
	printf("\n");
	int i;
	for(i=1;i<=L.length;i++){//线性表起始位置为1
		printf("\t\t%3d",L.elem[i-1]);
		if(i>0&&i%10==0){
			printf("\n");
		}
	}
	printf("\n");
}

Status ListInsert(SqList &L,int i,ElemType e){
	//重新分配空间指针、插入位置、移动指针
	ElemType *newbase,*p,*q;
	//插入位置是否合法
	if(i<1||i>L.length+1)return ERROR;
	if(L.length>=L.listsize){//当前线性表已满
		//重新申请空间,并释放原空间
		newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
		if(!newbase)return OVERFLOW;//申请失败
		L.elem=newbase;//重新指向新申请的空间
		L.listsize+=LISTINCREMENT;//增大线性表容量
	}
	q=&L.elem[i-1];//取出要输入位置的地址
	for(p=&(L.elem[L.length-1]);p>q;--p){//循环移动
		*(p+1)=*p;
	}
	*q=e;
	++L.length;
	
	return OK;
}

//删除元素
Status ListDelete(SqList &L,int i,ElemType &e){
	ElemType *p,*q;
	if(i<1||i>L.length)return ERROR;
	q=&L.elem[i-1];//取出要删除的元素指针
	e=*q;//将删除的元素返回
	for(p=q;p<L.elem+L.length-1;++p){//从删除位置到表尾,元素前移
		*p=*(p+1);
	}
	L.length--;
	
	return OK;
}

 

分享到:
评论

相关推荐

    数据结构实验报告-线性表-两个有序线性表的归并算法

    具体来说,实验要求学生通过键盘输入数据来建立两个有序线性表,并最终将这两个有序线性表合并成一个新的有序线性表。 #### 实验内容与要求详解 1. **线性表的构建**: - 实验首先要求从键盘输入数据,构建两个...

    将一个整数线性表拆分成奇数和偶数线性表

    标题 "将一个整数线性表拆分成奇数和偶数线性表" 涉及的核心知识点是数据结构中的线性表操作以及算法设计。线性表是一种基本的数据结构,它由有限个相同类型元素构成的有序序列,常见的实现方式有数组和链表。 在本...

    线性表(c语言代码)

    ### 线性表在C语言中的实现 #### 一、引言 线性表是计算机科学中最基本的数据结构之一,它是由n个相同类型的元素组成的一个有限序列。线性表可以通过顺序存储或链式存储两种方式来实现。本文将通过分析一段C语言...

    数据结构线性表作业

    数据结构线性表作业 在本资源中,我们将深入探讨数据结构线性表的作业,涵盖了线性表的定义、特点、操作和应用。同时,我们还会解释线性表的频度、时间复杂度和空间复杂度等概念,并通过具体的代码示例和算法来实现...

    线性表的顺序存储 线性表的顺序存储

    线性表是计算机科学中一种基础的数据结构,它是由n(n≥0)个相同类型元素构成的有限序列。在顺序存储结构中,线性表的元素被存储在一个一维数组中,按照它们在表中的相对位置来表示数据之间的逻辑关系。这种方式...

    线性表的应用(数据结构-线性表)

    ### 线性表的应用(数据结构-线性表) #### 实验目的 通过本实验,学生将能够深入了解线性表的基本结构与操作方法,并掌握如何利用这些基本知识来解决实际问题。具体而言,学生应能够: - 理解线性表的基本概念...

    线性表操作集合(网上整理)

    线性表是一种基础的数据结构,它是由相同类型元素构成的有限序列。在计算机科学中,线性表的操作集合通常包括创建、插入、删除、获取元素和合并等基本操作。以下是对给定文件中涉及的线性表操作的详细解释: 1. **...

    线性表的合并/c语言

    线性表是计算机科学中一种基础且重要的数据结构,它由一组相同类型的数据元素按特定顺序排列而成。在这个“线性表的合并/c语言”项目中,我们将探讨如何使用C语言来实现线性表的合并操作,特别是针对有序线性表的...

    C# 线性表使用实例

    在编程领域,线性表是一种基础且重要的数据结构,它由有限个相同类型元素组成,元素之间存在一对一的关系。在C#中,我们可以通过类和接口来实现线性表,同时利用泛型来提高代码的复用性。下面将详细探讨如何在C#中...

    线性表小程序,C#,可以实现线性表中某一元素的删除、插入,及线性表的连接

    线性表是一种基础的数据结构,它是由n(n&gt;=0)个相同类型元素构成的有限序列。在C#中,我们可以使用数组或者列表(List)来实现线性表。这个线性表小程序提供了对线性表的基本操作,包括元素的插入、删除以及线性表的...

    c语言数据结构实现线性表

    线性表是数据结构中最基础且重要的一种结构,它是由n(n≥0)个相同类型元素构成的有限序列。在C语言中实现线性表,通常会涉及到数组或链表这两种方式。下面我们将深入探讨如何用C语言来实现线性表,并结合描述和...

    C++线性表合并,数据结构作业

    线性表的合并通常涉及到两个或更多线性表的组合,目标是形成一个新的线性表,其中包含所有原始线性表的元素。在C++中,我们可以使用数组、链表或者动态数组(如std::vector)来表示线性表。这里我们将主要讨论基于...

    线性表的基本操作的实验报告

    【线性表的基本操作实验报告】 线性表是数据结构中的基本概念,它是由n(n≥0)个相同类型元素构成的有限序列。在这个实验报告中,我们将深入理解和掌握线性表的顺序存储结构以及相关操作。实验的主要目的是通过...

    两个非递减存储顺序线性表归并为非递减顺序线性表

    数据结构线性表的实现和归并 本文主要介绍数据结构中线性表的实现和归并,通过编写程序,建立两个非递减存储的顺序线性表,并将其归并为一个非递减顺序的线性表。 线性表的定义和实现 线性表是一种基本的数据结构...

    线性表的顺序存储结构

    线性表的顺序存储结构是数据结构中一种基础且重要的概念,它是指用一组连续的存储单元存储线性表中的所有元素。在这个演示程序中,线性表被用来存储学生信息,每个学生的信息由结构体`STU`表示,包含了姓名、学号、...

    线性表顺序存储运算的算法实现

    线性表是一种基础且重要的数据结构,它是由n(n≥0)个相同类型元素构成的有限序列。在计算机科学中,线性表的顺序存储是常用的数据组织方式,其特点是元素在内存中按顺序连续存放。本话题将深入探讨线性表的顺序...

    线性表的实现全部代码

    ### 线性表的实现知识点详解 #### 一、线性表的概述与存储方式 线性表是计算机科学中最基本的一种数据结构之一,它由相同类型的数据元素构成,这些元素之间存在着一种先后关系。根据存储方式的不同,线性表可以分为...

    线性表的实现实验报告

    ### 线性表的实现实验报告 #### 实验背景与目的 线性表是计算机科学中最基本的数据结构之一,它是由n(n≥0)个相同类型元素组成的有限序列。线性表中的元素可以是任何类型的数据,如整数、字符等。线性表有两种主要...

    数据结构_线性表操作

    初始化线性表 *\n"; cout* 2.删除线性表中所有元素 *\n"; cout* 3.得到线性表的长度 *\n"; cout* 4.检查线性表是否为空 *\n"; cout* 5.得到线性表中指定序号元素 *\n"; cout* 6.遍历一个线性表 *\n"; cout* 7....

Global site tag (gtag.js) - Google Analytics