C语言实现动态顺序表

纯 C 语言实现动态顺序表

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
#define InitSize 100
typedef int ElemType;
typedef struct{
	ElemType *data; //存储空间基地址
    int length; //当前长度
    int listsize; //当前分配的存储容量(以 sizeof(ElemType)为单位)
	
}SqList;


int LocateElem(SqList &L,ElemType &e)
{
	int i;
	for(i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+1;
	return 0;
}


bool InitList(SqList &L){	

    L.data = (ElemType *)malloc(InitSize*sizeof(ElemType));
    if (!L.data)
    	return false; //内存分配失败  
   	L.data[5]=100;
    L.length = 7; 
    L.listsize = InitSize; 
    printf("初始化成功!\n");
    return true;		
}


bool ListInsert(SqList &L,int i,ElemType e)
{
	if((L.length+1>MaxSize)||(i>MaxSize-1)||(i<0)||(i>L.length))
	{
		printf("插入失败\n");
		return false;
	}
	
	if(L.length==0)
	{
		L.data[0]=e;
		L.length++;
	}else{
		for(int j=L.length;j>=i;j--)
			L.data[j] = L.data[j-1];
		L.data[i-1]=e;
		L.length++;
	}
	return true;
}


bool ListDelete(SqList &L,int i,ElemType &e)
{
	if((i>MaxSize-1)||(i<0)||(i>L.length))
	{
		printf("删除失败\n");
		return false;
	} 
	  
	e=L.data[i-1];
	for(int j=i;j<L.length;j++){
		L.data[j-1]=L.data[j];
	L.length--;
	return true;
    }
}


int main()
{
	int i,e;
	ElemType c;
    SqList *L = (SqList*)malloc(sizeof(SqList));//创建顺序表 
    SqList temp = *L;
	InitList(temp);
 
    
	printf("当前的顺序表为:\n");
	for(i=0;i<temp.length;i++)
	{
		printf("data[%d]=%d\n",i,temp.data[i]);
	}
	printf("顺序表的长度为:%d\n",temp.length);
	
	printf("1)按值查找:\n"); 
	printf("请输入查询的数据元素值(默认为 100):");
	scanf("%dn",&i);
	printf("查询到值为%d 的位序是:%d\n",i,LocateElem(temp,i));
	
	
	printf("2)顺序表插入:\n"); 
	printf("请输入插入位置 i:");
	scanf("%d",&i);
	if(i>=0){
			printf("请输入插入值 e:");
			scanf("%d",&e);
			if(e!=0)
				{
					if(ListInsert(temp,i,e))
					{
						printf("插入成功,插入数据元素%d 到第%d 位置\n",e,i);
					}	
				}	
				
			}

						
	printf("插入完毕,打印顺序表:\n");
	
	for(i=0;i<temp.length;i++)
	{
		printf("data[%d]=%d\n",i,temp.data[i]);
	}
	printf("顺序表的长度为:%d\n",temp.length);
	
	
	printf("3)顺序表删除:\n"); 
	printf("请输入删除的位置 i:");
	scanf("%dn",&i);
	if(i>=0){
     	if(ListDelete(temp,i,c))
					{
						printf("第%d 位置的元素值为%d 已经删除!\n",i,c);
					}	
			}

	printf("删除完毕,打印顺序表:\n");
	for(i=0;i<temp.length;i++)
	{
		printf("data[%d]=%d\n",i,temp.data[i]);
	}
	printf("顺序表的长度为:%d\n",temp.length);
		
	return 0;
}
/**
Coding By AnCoLin
*/ 

运行结果如图:

文章目录

1 条评论

发表评论

*