数据结构——C语言顺序表

线性表

  1. 线性表是零个或多个元素的又穷序列。
  2. 一般其结构体成员主要有最大个数,当前个数,数组
  • 下方是线性表基本操作C代码实现

#include <stdio.h>


typedef int DataType;

struct seqList
{
	int MAXNUM;
	int n;
	DataType *element;
};

typedef struct seqList *List;

 
List CreateNULLseqList(int m)  //create NULL list 
{
	List list=(List )malloc(sizeof(struct seqList));
	if(list != NULL)
	{
		list->element=(DataType *)malloc(sizeof(DataType)*m);
		if(list->element != NULL)
		{
			list->MAXNUM=m;
			list->n=0;
			
			return list;  
		}
	}
	printf("Out of space!\n");
	return NULL;
} 

int IsListNULL(List list)
{
	if(list==NULL) return 1;
	return 0;
}

void InputseqList(List list, int n)
{
	int arr[100];
	list->n=n;
//	printf("%d \n", n);
	for(int i=0; i<list->n; i++)
	{
		scanf("%d", &arr[i]);
		list->element[i]=arr[i];
	}
}

void PrintseqList(List list)
{
	printf("当前的顺序表为:");
	for(int i=0; i<list->n; i++)
	{
		printf("%d ", list->element[i]);
	}
	printf("\n");
}

//插入就往后移 
int InsertPre(List list, int p, DataType x)
{
	int i;
	//判断顺序表是否满了
	if(list->n+1>=list->MAXNUM)
	{
		printf("Overflow!\n");
		return 0;
	}
	if(p<0 || p>list->n)
	{
		printf("Not exit!\n");
		return 0;
	}
	//顺序表的插入,需要元素后移,即在循环没找到时后移
	for(i=list->n-1; i>0 && i>=p; i--)
	{
		list->element[i+1]=list->element[i];
	} 
	list->element[i+1]=x;
	list->n=list->n+1;
	return 1;
}

int InsertPost(List list, int p, DataType x)
{
	int i;
	if(list->n+1>=list->MAXNUM) 
	{
		printf("Overflow!\n");
		return 0;
	}
	if(p<0 || p>list->n)
	{
		printf("Not exit!\n");
		return 0;
	}
	for(i=list->n-1; i>p; i--)
	{
		list->element[i+1]=list->element[i];
	}
	list->element[i+1]=x;
	list->n=list->n+1;
	return 1;
}

//删除就往前移 
int DelseqList(List list, int p)
{
	if(IsListNULL(list)) return 0;
	for(int i=p; i<list->n-1; i++)
	{
		list->element[i]=list->element[i+1];
	}
	list->n=list->n-1;
	return 1;	
}

//默认无重复元素 
int LocateList(List list, DataType x)
{
	if(IsListNULL(list)) return 0;
	for(int i=0; i<list->n; i++)
	{
		if(list->element[i]==x) return i;
	}
}

int main()
{
	List list;
	int m, n, p;
	DataType x;
	printf("请输入顺序表最多可以存储多少个元素:");
	scanf("%d", &m);
	list=CreateNULLseqList(m);
	
	printf("\n请输入当前顺序表所要存储的数据个数及数据:");
	scanf("%d", &n);
	InputseqList(list, n);
	
	PrintseqList(list);
	
	printf("\n前插,请输入要插入元素的位置及元素:");
	scanf("%d", &p);
	scanf("%d", &x);
	InsertPre(list, p, x);
	
	PrintseqList(list);
	
	printf("\n后插,请输入要插入元素的位置及元素:");
	scanf("%d", &p);
	scanf("%d", &x);
	InsertPost(list, p, x);	
		
	PrintseqList(list);
	
	printf("\n请输入要查找的元素:");
	scanf("%d", &x);
	printf("该元素的位置为%d\n", LocateList(list,x));
	return 0;
}

代码中的位置,指的是元素在线性表中element的下标。

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值