欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解C语言之顺序表

程序员文章站 2022-03-24 08:33:28
目录一、思维导图二、步骤1.初始化2.求表长3.插入数据元素4.删除数据元素5.取出数据元素按位查找按位查找所有代码总结一、思维导图二、步骤1.初始化代码如下:void listinit(seqlis...

一、思维导图

详解C语言之顺序表

二、步骤

1.初始化

代码如下:

void listinit(seqlist *l)
{
	l->size = 0;
}

2.求表长

代码如下:

int listlength(seqlist l)
{
	return l.size;
}

3.插入数据元素

代码如下:

int listinsert(seqlist *l, int i, datatype x)
{
	int j;
	if (l->size >= maxsize)
	{
		printf("顺序表已满,插入失败!!!\n");
		return 0;
	}
	else if (i<0 || i>l->size)
	{
		printf("参数i不合法,插入失败!!!\n");
		return 0;
	}
	else
	{
		for (j = l->size; j > i; j--)
			l->list[j] = l->list[j - 1];
		l->list[i] = x;
		l->size++;
		return 1;
	}
}

4.删除数据元素

代码如下:

int listinsert(seqlist *l, int i, datatype x)
{
	int j;
	if (l->size >= maxsize)
	{
		printf("顺序表已满,插入失败!!!\n");
		return 0;
	}
	else if (i<0 || i>l->size)
	{
		printf("参数i不合法,插入失败!!!\n");
		return 0;
	}
	else
	{
		for (j = l->size; j > i; j--)
			l->list[j] = l->list[j - 1];
		l->list[i] = x;
		l->size++;
		return 1;
	}
}

5.取出数据元素

按位查找

代码如下:

int listget(seqlist l, int i, datatype *x)
{
	if (l.size <= 0)
	{
		printf("顺序表已空,取出元素失败!!!\n");
		return 0;
	}
	else if (i < 0 || i >= l.size)
	{
		printf("参数i不合法,取出元素失败!!!\n");
		return 0;
	}
	else
	{
		*x = l.list[i];
		return 1;
	}
}

按位查找

代码如下:

int listgetz(seqlist l, datatype x, int *i)
{
	int j;
	for (j = 0; j < listlength(l); j++)
	{
		if (l.list[j] == x)
		{
			*i = j;
			return 1;
		}
	}
	return 0;
}

所有代码

#include <stdio.h>
#define maxsize 1024 //数组能存储的最大最大元素个数
typedef int datatype; //存储数据元素的数据类型
typedef struct
{
	datatype list[maxsize];
	int size; //当前存储的数据元素个数
}seqlist;
//初始化
void listinit(seqlist *l)
{
	l->size = 0;
}
//求表长
int listlength(seqlist l)
{
	return l.size;
}
//插入数据元素
int listinsert(seqlist *l, int i, datatype x)
{
	int j;
	if (l->size >= maxsize)
	{
		printf("顺序表已满,插入失败!!!\n");
		return 0;
	}
	else if (i<0 || i>l->size)
	{
		printf("参数i不合法,插入失败!!!\n");
		return 0;
	}
	else
	{
		for (j = l->size; j > i; j--)
			l->list[j] = l->list[j - 1];
		l->list[i] = x;
		l->size++;
		return 1;
	}
}
//删除数据元素
int listdelete(seqlist *l, int i, datatype *x)
{
	int j;
	if (l->size <= 0)
	{
		printf("顺序表已空,删除失败!!!\n");
		return 0;
	}
	else if (i < 0 || i >= l->size)
	{
		printf("参数i不合法,删除失败!!!\n");
		return 0;
	}
	else
	{
		*x = l->list[i];
		for (j = i; j < l->size - 1; j++)
			l->list[j] = l->list[j + 1];
		l->size--;
		return 1;
	}
}
//取出数据元素
//按位查找
void listget(seqlist l, int i, datatype *x)
{
	if (l.size <= 0)
	{
		printf("顺序表已空,取出元素失败!!!\n");
		return 0;
	}
	else if (i < 0 || i >= l.size)
	{
		printf("参数i不合法,取出元素失败!!!\n");
		return 0;
	}
	else
	{
		*x = l.list[i];
		return 1;
	}
}
//安值查找
int listgetz(seqlist l, datatype x, int *i)
{
	int j;
	for (j = 0; j < listlength(l); j++)
	{
		if (l.list[j] == x)
		{
			*i = j;
			return 1;
		}
	}
	return 0;
}
int main()
{
	seqlist l;
	int i, x;
	listinit(&l);
	for (i = 0; i < 10; i++)
		listinsert(&l, i, i + 10);
	listdelete(&l, 4, &x);
	for (i = 0; i < listlength(l); i++)
	{
		listget(l, i, &x);
		printf("%d ", x);
	}
	system("pause");
	return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!