头文件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、 掌握线性表的基本操作:初始化,插入,删除,查找,判空,求线性表长度等运算在顺序存储结构和链式存储结构上的实现。 3、 通过本章实验帮助学生加深对C语言的使用(特别是函数的参数调用、指针类型的应用)。 ...
线性表结构实验 1.实验目的: (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握线性表的顺序存储结构的定义及C语言实现。 (3)掌握线性表在顺序存储结构即顺序表中的各种基本操作。 2.问题描述...
数据结构_线性表的链式存储 实验目的 1. 掌握线性表的链式存储结构。 2. 能熟练地利用链式存储结构实现线性表的基本操作。 3. 能熟练地掌握链式存储结构中算法的实现。 实验内容 1. 分别用头插法和尾插法建立带头...
1、 创建线性表类。线性表的存储结构使用链表。 2、 提供操作:自表首插入元素、删除指定元素、搜索表中是否有指定元素、输出链表。 3、 接收键盘录入的一系列整数(例10,25,8,33,60)作为节点的元素值,创建链表。...
从键盘输入数据,建立两个有序线性表(每个线性表的输入数据按由小到大次序输入来建立线性表,不必考虑排序算法);输出建好的这两个有序线性表;将这两个有序线性表归并为一个有序线性表;输出归并后的有序线性表。 ...
根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。线性表存储结构(五选一):1、 带头结点的单链表2、 不带头结点的单链表3、 循环链表4、 双链表5、 静态链表线性表的...
试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(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) 学院: 专业: 班级: "姓名 " "学号 " "实验组" " "实验时间 "2011-10-28 "指导教师" "成绩 " " "实验项目名称 "线性表的顺序存储结构 " "实 "1. 熟练掌握线性表的基本操作在顺序存储和链式...
1、选择顺序或链式存储结构实现线性表的基本操作 2、采用顺序或链式存储方式存储线性表,在此基础上实现线性表的各个操作,以及线性表的合并操作
JAVA线性表JAVA线性表JAVA线性表JAVA线性表
线性表的顺序存储,此程序主要实现线性表的顺序存储,有C++语言实现,还是比较轻易看得懂的!
使用C++类模板实现了线性表的链式存储结构(链表),类中包含了线性表的常用方法:向线性表中插入一个元素、删除一个元素、清空线性表、获取一个元素、获取线性表长度等。大致实现了STL中的链表的基本功能,通过对比...