`

线性表

 
阅读更多

头文件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;
}

 

分享到:
评论

相关推荐

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

    从键盘输入数据,建立两个有序线性表(每个线性表的输入数据按由小到大次序输入来建立线性表,不必考虑排序算法);输出建好的这两个有序线性表;将这两个有序线性表归并为一个有序线性表;输出归并后的有序线性表。 ...

    数据结构_线性表操作

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

    线性表的操作,看看吧

    #define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量 #define LISTINCREMENT 1 //线性表存储空间分配增量 typedef int Status; //函数类型,其值为为函数结果状态代码 typedef int ElemType; //假设数据...

    2、 掌握线性表的基本操作:初始化,插入,删除,查找,判空,求线性表长度等运算在顺序存储结构和链式存储结构上的实现

    2、 掌握线性表的基本操作:初始化,插入,删除,查找,判空,求线性表长度等运算在顺序存储结构和链式存储结构上的实现。 3、 通过本章实验帮助学生加深对C语言的使用(特别是函数的参数调用、指针类型的应用)。 ...

    C语言线性表结构实验

    线性表结构实验 1.实验目的: (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握线性表的顺序存储结构的定义及C语言实现。 (3)掌握线性表在顺序存储结构即顺序表中的各种基本操作。 2.问题描述...

    数据结构_线性表的链式存储

    数据结构_线性表的链式存储 实验目的 1. 掌握线性表的链式存储结构。 2. 能熟练地利用链式存储结构实现线性表的基本操作。 3. 能熟练地掌握链式存储结构中算法的实现。 实验内容 1. 分别用头插法和尾插法建立带头...

    数据结构实验-线性表使用

    1、 创建线性表类。线性表的存储结构使用链表。 2、 提供操作:自表首插入元素、删除指定元素、搜索表中是否有指定元素、输出链表。 3、 接收键盘录入的一系列整数(例10,25,8,33,60)作为节点的元素值,创建链表。...

    数据结构实验报告1-线性表-两个有序表的归并-实验内容及要求.docx

    从键盘输入数据,建立两个有序线性表(每个线性表的输入数据按由小到大次序输入来建立线性表,不必考虑排序算法);输出建好的这两个有序线性表;将这两个有序线性表归并为一个有序线性表;输出归并后的有序线性表。 ...

    实验一终稿_基本操作_C++_线性表_

    根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。线性表存储结构(五选一):1、 带头结点的单链表2、 不带头结点的单链表3、 循环链表4、 双链表5、 静态链表线性表的...

    线性表 实验报告.docx

    试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2...,an)逆置为(an,an-1,...,a1)。 选题9:(难)单链表拆分。 将带头结点的单链表LA中分拆成LB和LC两条单链表,LA中的data域...

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

    实验目的:掌握线性表的基本结构和操作方法,培养灵活使用表解决实际问题的能力。 实验内容: 一条记录有学号和成绩两个数据项,按成绩由大到小建立两个有序表(分别顺序表和链式表实现),并合并成一个有序表(有...

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

    将这个线性表拆分成一个奇数线性表和一个偶数线性表线,性表的最大长度为20.

    数据结构——线性表

    该文件包括各种线性表的头文件,另外还实现了简单单链表、简单顺序线性表、从A链表中删除B和C链表共有的元素、单链表逆置(以整数为例)、将链表中元素按递增排序并删除所选定范围内的元素、求一个新的集合A为A和B的...

    数据结构线性表实验源代码

    数据结构线性表实验源代码,绝对好用. #define list_init_size 100 #define listcrement 10 #include #include typedef struct { int *elem; int length; int listsize; }sqlist; //构造一个空的线性表 int ...

    数据结构实验报告1线性表的顺序存储结构.doc

    数据结构实验报告(1) 学院: 专业: 班级: "姓名 " "学号 " "实验组" " "实验时间 "2011-10-28 "指导教师" "成绩 " " "实验项目名称 "线性表的顺序存储结构 " "实 "1. 熟练掌握线性表的基本操作在顺序存储和链式...

    实现线性表的插入、删除、查找以及线性表合并等基本操作以及线性表合并等基本操作的程序

    1、选择顺序或链式存储结构实现线性表的基本操作 2、采用顺序或链式存储方式存储线性表,在此基础上实现线性表的各个操作,以及线性表的合并操作

    JAVA线性表JAVA线性表JAVA线性表

    JAVA线性表JAVA线性表JAVA线性表JAVA线性表

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

    线性表的顺序存储,此程序主要实现线性表的顺序存储,有C++语言实现,还是比较轻易看得懂的!

    链表的C++实现(线性表的链式存储C++实现)

    使用C++类模板实现了线性表的链式存储结构(链表),类中包含了线性表的常用方法:向线性表中插入一个元素、删除一个元素、清空线性表、获取一个元素、获取线性表长度等。大致实现了STL中的链表的基本功能,通过对比...

Global site tag (gtag.js) - Google Analytics