演示顺序线性表的例子

看了数据结构的书,为了动动手,仿着程杰老师的代码,写了下面一个演示顺序线性表的例子,优点是去元素的时候O(1)就能解决,不好的地方是浪费空间啊。
/*
 * list.cpp
 *
 *  Created on: 2013-4-1
 *      Author: CJ
 */
#include <iostream>
using namespace std;

#define MAXSIZE 20

typedef int ElemType;
//顺序链表的结构
typedef struct SQList{
	ElemType data[MAXSIZE];//A[0]-A[MAXSIZE-1]
	int length;
} SqList;

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int status;
//获得元素操作
status GetElem(SqList L, int i, ElemType *e){
//判断顺序链表是否为空
	if(L.length==0 || i<0 ||i>L.length)
		return ERROR;
//不为空,就取出I位置对应的元素
	*e = L.data[i];
	return OK;
}

//插入操作
status ListInsert(SqList *L, int i, ElemType e){
//判断、出错处理
	int k;
	if(L->length==MAXSIZE) return ERROR;
	if(i<0 || i>L->length) return ERROR;
	if(i<L->length-1){
		//因为放到第I个位置,后面的元素都得让集体移动
		for(k=L->length-1;k>i;k--){
			L->data[k]=L->data[k-1];
		}

	}
	L->data[i]=e;
	L->length++;
	return OK;

}
//删除操作
status ListDelete(SqList *L, int i, ElemType *e){
//先判断,出错的情况
	int k;
	if(L->length==0 || i<0 || i>=L->length ) return ERROR;
//是否删除表尾,否则
	if(i<L->length-1){
		*e = L->data[i];
		for(k = i;k<L->length-1;k++)
		{
			L->data[k]=L->data[k+1];
		}
	}
	L->length--;
	return OK;
}

void test()
{
	SqList L;
	for(int i = 0; i<MAXSIZE;i++){
		L.data[i]=0;
	}
	L.length=0;

	ListInsert(&L,0,1);
	ListInsert(&L,1,2);
	ListInsert(&L,2,3);
	ListInsert(&L,3,4);

	for(int i = 0;i<L.length;i++)
	{
		ElemType e=-1;
		GetElem(L,i,&e);
		cout<<"Elememt "<<i<<" : "<<e<<endl;
	}
	ElemType ee=-1;
	ListDelete(&L,2,&ee);
	cout<<"delete Element: "<<ee<<endl;

	for(int i = 0;i<L.length;i++)
		{
			ElemType e=-1;
			GetElem(L,i,&e);
			cout<<"Elememt "<<i<<" : "<<e<<endl;
		}
}
int main(){
	test();
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值