/******************************
Author: Fox
Last Date: 2011-03-09 20:33:34
Description: 顺序表
******************************/
/*sqlist.h*/
#define MAXSIZE 50 /*线性表的最大长度*/
typedef char ElemType; /*根据实际修改*/
typedef struct
{
ElemType data[MAXSIZE];
int length; /*线性表的长度*/
}SqList;
typedef SqList * List; /*List是指向SqList结构的指针*/
void InitList(List L); /*初始化线性表L*/
void DestroyList(List L); /*销毁线性表L*/
int ListEmpty(List L); /*判断线性表L是否为空*/
int ListLength(List L); /*求线性表L长度*/
void DispList(List L); /*输出线性表L中所有元素*/
void GetElem(List L, int i, ElemType *e); /*用*e返回线性表L中第i个元素的值*/
int LocateElem(List L, const ElemType e); /*返回线性表L中第一个与e相同的值的位序,返回0表示不存在*/
void ListInsert(List L, int i, const ElemType e); /*将元素e插入线性表L中第i位*/
void ListDelete(List L, int i, ElemType *e); /*删除线性表L中第i个元素,并用*e返回其值*/
/*以上i的取值范围:1<= i <= length*/
****************************************
****************************************
/*sqlist.c*/
#include <stdio.h>
#include "sqlist.h"
void InitList(List L) /*初始化线性表L*/
{
L->length = 0;
}
void DestroyList(List L); /*销毁线性表L*/
int ListEmpty(List L) /*判断线性表L是否为空*/
{
return L->length == 0; /*线性表L空返回1,非空返回0*/
}
int ListLength(List L) /*求线性表L长度*/
{
return L->length;
}
void DispList(List L) /*输出线性表L中所有元素*/
{
int i = 0;
while(L->length > i)
printf("%c ", L->data[i++]); /*针对不同数据类型改变格式控制符*/
printf("\n");
}
void GetElem(List L, int i, ElemType *e) /*用*e返回线性表L中第i个元素的值*/
{
if(i <= L->length)
*e = L->data[i - 1];
else
printf("GetElem failed!\n");
}
int LocateElem(List L, const ElemType e) /*返回线性表L中第一个与e相同的值的位序,返回0表示不存在*/
{
int i = 0;
while(i < L->length)
{
if(e == L->data[i])
return i + 1;
else
++i;
}
return 0;
}
void ListInsert(List L, int i, const ElemType e) /*将元素e插入线性表L中第i位*/
{
int n = L->length;
if(i > n + 1) /*可以插在线性表L尾部,但不能超出尾部后一位*/
{
printf("Insert failed!\n");
return ; /*插入失败直接返回*/
}
/*将第n至i位依次向后移动一位*/
while(n >= i)
{
L->data[n] = L->data[n - 1];
--n;
}
L->data[i - 1] = e;
++L->length; /*插入元素e后线性表L长度增1*/
}
void ListDelete(List L, int i, ElemType *e) /*删除线性表L中第i个元素,并用*e返回其值*/
{
int n = L->length;
if(i > n)
{
printf("Delete failed!\n");
return ;
}
*e = L->data[i - 1];
/*将第i+1至n位依次向前移动一位*/
while(i < n)
{
L->data[i - 1] = L->data[i];
++i;
}
--L->length; /*删除指定元素后线性表L长度减1*/
}
****************************************
****************************************
/*简单测试代码test.c*/
#include <stdio.h>
#include "sqlist.h"
int main(void)
{
int i = 0;
SqList L; /*L是SqList类型变量*/
InitList(&L); /*用线性表L的地址做参数,初始化线性表*/
printf("%d\n", ListLength(&L));
while(i++ < 10)
{
ListInsert(&L, 1, 'A');
if(!ListEmpty(&L))
printf("Not Empty!\n");
printf("%d\n", ListLength(&L));
DispList(&L);
printf("\n\n");
}
return 0;
}
****************************************
****************************************
/*makefile*/
test : test.o sqlist.o
[TAB]gcc -o test test.o sqlist.o
test.o : test.c sqlist.h
[TAB]gcc -c test.c
sqlist.o : sqlist.h sqlist.c
[TAB]gcc -c sqlist.c
clean :
[TAB]rm *.o
说明:由于水平制表符没法在文中显示,故以[TAB]表示一个制表符。
分享到:
相关推荐
顺序表实现单词统计,使用c语言编写(Sequence table for word statistics)
图书管理c语言顺序表实现
这个是自己编写的用顺序表实现一元稀疏多项式的基本操作
用顺序表实现约瑟夫环问题,并分析算法的时间和空间复杂性。
数据结构实验报告1-顺序表实现简易的学生信息管理系统(C语言),包括实验环境,实验的小结,实验的源代码,实验截图等。 说明:仅供参考,如有bug,还请反馈!
定义图书类型结构,定义顺序表;完成功能:初始化构建空表、插入新记录到第i个位置、删除表中第i个记录、按图书名称进行查找、按作者进行查找、按价格区间进行查找。
使用顺序表实现的队列 包含实现与测试 对应于数据机构与算法分析(c++版)第三版或第二版 Clifford A.Shaffer 重庆大学使用教材
用顺序表表示约瑟夫环,其中密码相同,即为静态存储约瑟夫环的内容
用顺序表实现稀疏矩阵的基本操作
案例问题描述: 班级是学生生活、学习和成长的重要组织机构。每个班级有很多成员,主要包括课任老师和学生两大类,其中课任老师有分担班级教学工作和管理工作...案例用c语言实现,在VS的cpp文件中运行,用顺序表存储
基本上利用顺序表实现了多项式的求和与求积运算。但是在求积算法上不够精炼.........
通过java顺序表实现约瑟夫环的两种方式: 1.通过数组移动 2.通过记录出对列的人员下标,下次查数时跳过
用顺序表来实现城市信息记录,有插入,删除,查询,修改,计算等功能。
通过简单的程序解决约瑟夫环问题 c++文件
题目 顺序表实现学生健康情况管理系统 【问题描述】 实现学生健康情况管理的几个操作功能(新建、插入、删除、从文件读取、写入文件和查询、屏幕输出等功能)。健康表中学生的信息有学号、姓名、出生日期、性别、...
有序顺序表实现集合的各种运算 用有序顺序表完成集合与集合的交集,差集,并集,包含于之间的运算以及元素与集合的判断关系
有一个顺序表L,假设元素类型为整型。设计一个算法,将所有奇数移动到偶数的前面。请分析算法的时间复杂度和空间复杂度。
学生管理系统采用顺序表、模版类、 友元函数等C++比较不经常见的模式来实现,可以帮助你更好的弄清楚C++的一些特殊用法。
这是本人编写的采用顺序表实现约瑟夫环,希望在学习的过程中和大家共勉。
定义顺序表,包含成员{影片名;时间;座位数;票价;评价;上座率} 完成功能:1、初始化构造顺序表;2、插入一条影片信息;3、删除一条影片信息;4、按影片名查找;5、购票;6、退票;7、求上座率;8、查看评价