[数据结构]线性表-顺序表相关操作(纯c语言超详细)

线性表-顺序表相关操作(纯c语言)

1、顺序表的创建并存入数据

#include "stdio.h"
#include "windows.h"
#include "stdlib.h"

#define MAXSIZE 20//顺序表最大长度

/*定义顺序表*/
typedef struct {
	int data[MAXSIZE];
	int length;
}Sqlist;

/*初始化顺序表*/
void InitList(Sqlist *l){
	l->length = 0;
}

/*建立顺序表*/
int CreatList(Sqlist *l, int a[], int n) {
	if (n > MAXSIZE)
	{
		printf("空间不够,无法建立顺序表。\n");
		return 0;
	}
	int k;
	for (k = 0; k < n; k++)
	{
		l->data[k] = a[k];
	}
	l->length = n;
	return 1;
}

/*判空操作*/
int Empty(Sqlist *l){
	if (l->length == 0)
		return 1;
	else
		return 0;
}

int main()
{
	int a[8] = {1,2,3,4,5,6,7,8};
	int  i;
	Sqlist list1;
	
	InitList(&list1);//初始化顺序表
	
	if (Empty(&list1)){//判空 
		printf("初始化顺序表成功!\n");
	}
	
	printf("给顺序表赋值:1 2 3 4 5 6 7 8\n遍历并输出顺序表:\n");
	CreatList(&list1,a,8);//建立一个长度为8的线性表,将数据存进去 
	/*后续操作*/
	for(i = 0;i < list1.length;i++){//循环遍历顺序表,打印 
		printf("%d\n",list1.data[i]);
	}

	system("pause");
	return 0; 
}


2、有序的插入数值

/*寻找要插入的位置*/
int findElem(Sqlist *l,int x){
	int j;
	for(j = 0;j < l->length;j++){
		if(x < l->data[j]){
			return j;//找到要插入的位置
		}
	}
	return j;
} 

/*插入操作*/
void insertElem(Sqlist *l,int p,int x){
	int i;
//	p = findElem(&l,x);
	for(i = l->length-1;i >= p;--i){
		l->data[i+1] = l->data[i];//插入位置后面的元素从后向前依次向后移一个位置
	}
	l->data[p] = x;
	l->length++;//表长加一
} 

int main(){
    int  x = 12;//将12按顺序找到位置并插入进去
    	int p;
	p = findElem(&list1,x);
	
	insertElem(&list1,p,x);
}

3、按元素值查找

int FindElem(Sqlist l,int e){//这里不用引用型 Sqlist *l
	int i;
	for(i = 0;i < l.length;i++){
		if(l.data[i] == e){//元素与数组内的每个元素进行比较 
			return i;//找到第一个相等的元素,返回下标 
		}
	}
	return -1;
}

int main(){
    int e = 5;//要查找的值 
	int j;
	j = FindElem(list1,e);
	printf("查找到的元素下标为%d\n",j); 
}

4、指定位置插入元素

int InsertElem(Sqlist *l,int p,int e){//这里用引用型 Sqlist *l
	int i;
	if(p < 0||p > l->length||l->length == MAXSIZE){
		return 1; 
		printf("插入位置不合法或顺序表内已经没有位置了\n"); 
	}
	for(i = l->length-1;i >= p;i--){
		l->data[i+1] = l->data[i];//指定位置后的元素从后往前依次向后移一个位置 
	l->data[p] = e;//将元素插入到指定位置上 
	l->length += 1;//表长加一 
	return 0;
}

int main(){
    int p = 4;//指定的位置 
    int e = 6;//要插入的元素 
    InsertElem(&list1,p,e);
}

5、删除指定位置上的元素


int DeleteElem(Sqlist *l,int p,int *e){//这里用引用型 Sqlist *l
	int i;
	if(p<0||p>l->length-1){
		printf("指定位置错误"); 
		return 1;
	}
	*e = l->data[p];//将要删除的元素值赋给e,注意e是一个指针 
	for(i = p;i < l->length-1;i++){
		l->data[i] = l->data[i+1];//从指定位置后一个开始,从前到后元素依次向前移一个 
	} 
	l->length -= 1;//表长减一 
	return 0;
}

int main(){
    int p = 4;//指定的位置 
    int e; //接收删除的元素值 
    DeleteElem(&list1,p,&e);//使用e的地址 
    printf("要删除的元素为:%d\n",e); 
}

6、求指定位置上的元素

int GetElem(Sqlist l,int p,int *e){//这里不用引用型 Sqlist *l
	int i;
	if(p<0||p>l.length-1){
		printf("指定位置错误"); 
		return 1;
	}
	*e = l.data[p];//将要删除的元素值赋给e,注意e是一个指针 
	return 0;
}

int main(){
    int p = 4;//指定的位置 
	int e; //接收该位置上的元素值 
	GetElem(list1,p,&e);//使用e的地址 
	printf("下标为4的元素为:%d\n",e); 
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值