您的位置:首页 > 编程语言 > C语言/C++

c语言实现--顺序表操作

2013-11-15 15:08 363 查看
经过三天的时间终于把顺序表的操作实现搞定了。(主要是在测试部分停留了太长时间)

1;线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素。

2;采用的实现方式:一段地址连续的存储单元可以用固定数组或者动态存储结构来实现,这里采用动态分配存储结构。

3;顺序表的定义及操作集合:头文件为defs.h

#ifndef _DEFS_H
#define _DEFS_H

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define LIST_INIT_MAX 10      //长表为10
#define LIST_INCREMENT 2     //短表为2
typedef struct
{
int * elem;               //采用动态存储分配结构
int length;
int listsize;
}sqlist;
//线性表操作集合
void InitList(sqlist *L);              //初始化,动态分配一块存储空间
void DestroyList(sqlist *L);        //释放这一段存储空间(撤销对应于动态)
void ClearList(sqlist *L);
void ListEmpty(sqlist L);
int ListLength(sqlist L);
int GetElem(sqlist L, int i, int *e);
void LocateList(sqlist L, int e);     //在表中查找值为e的元素
int PriorElem(sqlist L, int cur_e, int *pri_e);  //求当前元素的前驱
int NextElem(sqlist L, int cur_e, int *Nex_e); //求当前元素的后继
int ListInsert(sqlist &L, int i, int e);    //插入操作
int ListDelete(sqlist &L, int i, int *e); //删除操作
void TravelList(sqlist L);                //便历操作
#endif


4;顺序表结构体示意图
 

TravelList.c

#include "defs.h"

void TravelList(sqlist L)
{
int i
int *p = L.elem;

for (i=0; i<L.length; i++,p++)
{
printf("第%d个元素为:%d\n", i+1, *p);
}

}


TravelList
17;makefile的实现

object = main.o InitList.o DestroyList.o ClearList.o ListEmpty.o \
ListLength.o GetElem.o LocateElem.o PriorElem.o NextElem.o \
ListInsert.o ListDelete.o TravelList.o

test : $(object)
gcc -g -Wall -o test $(object)
main.o : defs.h
InitList.o : defs.h
DestroyList.o : defs.h
ClearList.o : defs.h
ListEmpty.o : defs.h
ListLength.o : defs.h
GetElem.o : defs.h
LocateElem.o : defs.h
PriorElem.o : defs.h
NextElem.o : defs.h
ListInsert.o : defs.h
ListDelete.o : defs.h
TravelList.o : defs.h

.PHONY : clean
clean :
rm *.o -f


18;顺序表的优缺点:顺序表由于其存储结构的特点,特别适合查找(其时间复杂度为O(1)),不适合频繁插入和删除(每一次插入和删除的时间复杂度都是O(n))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: