C语言顺序表的简单实现

  今天刚学了数据结构,老师教的我是云里雾里的,晚上回来自己又教程视频,不管怎么说算是简单的实现了顺序表的一些简单功能。

  顺序表里的难点有向顺序表里插入元素,删除元素,查询元素位置这几个函数比较难写,我自己根据这几个难点做了几个图片来解释这几个功能的具体实现:

//插入元素 
int InsertList(sqlink L,int data,int no){
	int j;
	if(L->last >= maxsize-1){
		printf("没有空闲空间!\n");
		return 0;
	}else if(no<0||no>L->last+1){
		printf("插入位置不存在!\n");
		return 0;
	}else{
		for(j=L->last;j>=no-1;j--)
			L->data[j+1] = L->data[j];
		L->data[no-1] = data;
		L->last++;
		return 0;
	}
}

//删除元素
int DeleteList(sqlink L,int no){
	int j;
	if(no<0||no>L->last){
		printf("删除的元素不存在");
		return 0;
	}else{
		for(j=no;j+1<=L->last;j++)
			L->data[j] = L->data[j+1];
		L->last--;
		return 0;
	}
}

//定位元素
int LocateList(sqlink L,int data){
	int i = 0;
	while(i<=L->last&&L->data[i]!=data)
		i++;
	if(i<L->last) return i;
	else return 0;
}


所有代码的实现:

#include<stdio.h>
#include<malloc.h>
#define maxsize  1024  //线性表的最大长度
typedef struct{        //表的类型 
	int data[maxsize];//表的储存空间 
	int last;
}sqlist,*sqlink;      //说明标示符 


void CreateList(sqlink L);//创空表
void ClearList(sqlink L);//置空表
int GetList(sqlink L,int no);//取表元素 
int LengthList(sqlink L);//求表长
int InsertList(sqlink L,int data,int no);//插入元素
int DeleteList(sqlink L,int no);//删除元素
int LocateList(sqlink L,int data);//定位元素
int EmptyList(sqlink L);//判空表
void PrintList(sqlink L);//打印表元素 
 
int main(){
	
	sqlink L = (sqlink)malloc(sizeof(sqlist));
	CreateList(L);
	PrintList(L);
	
	int data,x;
	printf("请输入要插入的数据和位置:");
	scanf("%d %d",&data,&x);
	InsertList(L,data,x);
	PrintList(L);
	
	return 0;
} 

void CreateList(sqlink L){
	int tempNo = 1;
	int tempData = 0;
	do{
		printf("请输入顺序表第%d个元素:",tempNo);
		scanf("%d",&tempData);
		if(tempData!=-1){
			L->data[tempNo-1] = tempData;
			L->last = tempNo-1;
			tempNo++;
		}
	}while(tempNo<=maxsize&&tempData!=-1);
}
void PrintList(sqlink L){
	int i;
	for(i = 0;i<LengthList(L);i++){
		printf("%d ",L->data[i]);
	}
	printf("\n");
} 
void ClearList(sqlink L){
	L->last = -1;
}
int GetList(sqlink L,int no){
	int tempData = 0;
	tempData = L->data[no-1];
	return tempData; 
}
int LengthList(sqlink L){
	int tempL;
	tempL = L->last+1;
	return tempL;
}
//插入元素 
int InsertList(sqlink L,int data,int no){
	int j;
	if(L->last >= maxsize-1){
		printf("没有空闲空间!\n");
		return 0;
	}else if(no<0||no>L->last+1){
		printf("插入位置不存在!\n");
		return 0;
	}else{
		for(j=L->last;j>=no-1;j--)
			L->data[j+1] = L->data[j];
		L->data[no-1] = data;
		L->last++;
		return 0;
	}
}
//删除元素
int DeleteList(sqlink L,int no){
	int j;
	if(no<0||no>L->last){
		printf("删除的元素不存在");
		return 0;
	}else{
		for(j=no;j+1<=L->last;j++)
			L->data[j] = L->data[j+1];
		L->last--;
		return 0;
	}
}
//定位元素
int LocateList(sqlink L,int data){
	int i = 0;
	while(i<=L->last&&L->data[i]!=data)
		i++;
	if(i<L->last) return i;
	else return 0;
}


猜你喜欢

转载自blog.csdn.net/codeHaoHao/article/details/52916759