C++小白学习笔记——代码案例(3)

1、顺序表的 “一条龙”:构造、初始化、查找、删除、插入

#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;
#define OK 1
#define OVERFLOW -2
#define ERROR 0
typedef  int  Status; //数据元素的类型   就是给int换个名(Status = int) 
typedef  int  ElemType; //数据元素的类型 ElemType = int 

#define  MAXSIZE 100     //最大长度(给常量取别名)

typedef struct {
	ElemType  *elem;
	int length;
}SqList;//无名结构体取别名
							//构造一个空的顺序表L,其实就是一个函数
Status InitList (SqList &L)               
{    
	L.elem = new ElemType[MAXSIZE];   //为顺序表分配空间
	if(!L.elem) 
		exit(OVERFLOW);       //存储分配失败
	L.length = 0;					  //空表长度为0
	
	return OK;
}
										//输出顺序表L 
Status ShowList(SqList L)
{    
	int i;
	cout<<"顺序表为:"; 
	for(i = 0; i < L.length; i++)
		cout<<L.elem[i]<<"\t";	
}

 ElemType GetElem2(SqList L,int i)
{
	if (i<1||i>L.length)      //判断i值是否合理,若不合理,返回ERROR
		return ERROR;   
	ElemType e = L.elem[i-1];   //第i-1的单元存储着第i个数据
	
	return e;
}

Status GetElem(SqList L,int i,ElemType &e)//多了一个引用
{
	if (i<1||i>L.length)//判断i值是否合理,若不合理,返回ERROR
		return ERROR;   
	e=L.elem[i-1];   //第i-1的单元存储着第i个数据
	
	return OK;
}
//查找 
int LocateELem(SqList L,ElemType e)
{
	int i;
	for (i = 0; i < L.length; i++)
	  if (L.elem[i]==e) 
	  	return i+1;    // +1易掉            
	return 0;
}
//插入 
Status ListInsert(SqList &L,int i ,ElemType e)
{
	int j;
	if(i<1 || i>L.length+1) 
		return ERROR;	         //i值不合法
	if(L.length==MAXSIZE) 
		return ERROR;    //当前存储空间已满(满了就不能后移)    
		
	for(j = L.length-1; j >= i - 1; j--) 
	   L.elem[j+1]=L.elem[j];    //插入位置及之后的元素后移
	L.elem[i-1]=e;                     //将新元素e放入第i个位置
	++L.length;		     	//表长增1(易掉)
	
	return OK;
}
//删除 
Status ListDelete(SqList &L,int i)
{
	int j;
	if((i<1)||(i>L.length)) 
		return ERROR;	 //i值不合法
		
	for (j = i; j <= L.length - 1; j++)
		L.elem[j-1]=L.elem[j];   //被删除元素之后的元素前移  
	--L.length;         //表长减1(易掉)
	
	return OK;
}

Status ListDelete2(SqList &L,int i,ElemType &e)
{
    int j;
    if((i<1)||(i>L.length)) 
   		return ERROR;	 //i值不合法
    e=L.elem[i-1];
    for (j=i;j<=L.length-1;j++)
    	L.elem[j-1]=L.elem[j];   //被删除元素之后的元素前移  
    --L.length; //表长减1
           
    return OK;
}

int main()
{   
	int n,j,a,b,y;
    SqList x;
    InitList (x);//初始化 
    
    cout<<"请输入元素个数: "; 
	cin>>n; 
    cout<<"请输入元素: "<<endl; 
    for(int i = 0; i < n; i++)
    {
	  cin>>x.elem[i];
	  x.length++;
	}
	
	ShowList(x);
	cout<<endl;
	 
	cout<<"请输入要查找的值:";
	cin>>n;
	j=LocateELem(x,n);
	cout<<"查找值的位置是:"<<j<<endl;
	cout<<endl;
	
	cout<<"请输入要插入元素的位置和数值:"<<endl;
	cin>>a>>b;
	ListInsert(x,a,b);
	ShowList(x);
	cout<<endl<<endl;
	
	cout<<"请输入要指定删除元素的位置:";
	cin>>y;
	ListDelete(x,y);
	ShowList(x);
	
	return 0; 	 
}

【注】
C++小白学习笔记——代码案例(3)
//灰色的代码是无名结构体,整块代码是在给无名结构体取别名

上一篇:C语言顺序表的构造、销毁、清空、取值、插入、删除和查询


下一篇:c/c++1-STL