顺序表的实现

2010 年 12 月 13 日  |  下午 12:54分类:数据结构  |  标签:  |  1,662 views

//线性表的动态分配顺序存储结构,构造,插入与删除。
#include<string.h>
#include<ctype.h>
#include<malloc.h>
#include<limits.h>
#include<stdio.h>
#include<stdlib.h>
#include<io.h>
#include<math.h>
#include<process.h>
#include<iostream.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
typedef int Status;
typedef int Boolean;
typedef int ElemType;
#define LIST_INIT_SIZE 10
#define LIST_INCREMENT 2

struct SqList

{

 ElemType *elem;

 int length;

 int listsize;

};

void InitList(SqList &L)//构造一个空的线性表L

{

 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//分配存储空间

 if(!L.elem)

        exit(OVERFLOW);//存储分配失败

 L.length=0;//空表长度为0

 L.listsize=LIST_INIT_SIZE;//初始存储容量

}

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

//在L中第i个位置之前插入新的数据元素e,L的长度加1

{

 ElemType *newbase,*q,*p;

 if(i<1||i>L.length+1)

 return ERROR;

 if(L.length>=L.listsize)

 {

  if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(ElemType))))

         exit(OVERFLOW);

  L.elem=newbase;

  L.listsize+=LIST_INCREMENT;

 }

 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)

//删除L的第i个数据元素,并用e返回其值,L的长度减1

{

 ElemType*p,*q;

 if(i<1||i>L.length)

        return ERROR;

 p=L.elem+i-1;

 e=*p;

 q=L.elem+L.length-1;

 for(++p;p<=q;++p)

        *(p-1)=*p;

 L.length–;

 return OK;

}

void ListTraverse(SqList L,void(*vi)(ElemType&))

//依次对L的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。

//ListTraverse函数将线性表中的所有数据输出

{

 ElemType *p;

 int i;

 p=L.elem;

 for(i=1;i<=L.length;i++)

        vi(*p++);

 printf(“n”);

}

void print(ElemType &c)

{

 printf(“%d “,c);

}

void main()//主函数

{

 int j;

 SqList L;//顺序链表L

 ElemType e;//所有可能的数据类型e

 InitList(L);//构造一个空的线性表L

 for(j=1;j<=5;j++)

        ListInsert(L,j,j*3);//在L中第j个位置之前插入新的数据元素j*3,L的长度加1

 printf(“L=”);

 ListTraverse(L,print);//依次对L的每个数据元素调用函数print()。一旦print()失败,则操作失败。

 for(j=1;j<=2;j++)

 {

  ListDelete(L,j*2,e);//删除L的第j*2个数据元素,并用e返回其值,L的长度减1

  printf(“删掉e=%dn”,e);

 }

 printf(“L=”);

 ListTraverse(L,print);//依次对L的每个数据元素调用函数print()。一旦print()失败,则操作失败。

}

原创文章,转载请注明: 转载自zen cart二次开发,zen cart模板定制,zen-cart网站建设-小龙包

本文链接地址: 顺序表的实现


发表您的评论

您必须 登录 才能发表评论。