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

线性表结构之顺序表的基本操作

程序员文章站 2022-03-15 10:08:51
...

内容包括顺序表的初始化,创建,增加元素,删除元素,输出等

  • 顺序表的定义:
typedef struct Sqlist
{
	ElemType *elem_array;//表中元素(指针数组)
	int length;//当前表所用长度
	int listsize;	//表的存储数据量
}Sqlist;
  • 顺序表的初始化:
Status Init_Sqlist(Sqlist *L)
{
	L->listsize=MAX_SIZE;
	L->elem_array=(ElemType *)malloc(MAX_SIZE*sizeof(ElemType));
	if(!L->elem_array)
	{
		L->elem_array=NULL;
		return ERROR;
	}
	else
	{
		L->length=0;
		return OK;
	}
}
  • 顺序表的创建:(创建n个元素的顺序表)
Status Create_Sqlist(Sqlist *L,int n)//创建具有n个元素的顺序表
{
	int m;
	L->length=1;
	printf("input:\n");
	for(int i=0;i<n;i++)
	{
		scanf("%d",&m);
		L->elem_array[i]=m;//指针数组的赋值
		L->length++;
	}
	return OK;
}
  • 顺序表的插入:(在创建好的表中的第i个位置插入e这个元素)
Status Insert_Sqlist(Sqlist *L,int i,ElemType e)//在创建好的表中的第i个位置插入e这个元素
{
	int j;
	if(i<0||i>L->length-1)   printf("ERROR");
	else
	{
		for(j=L->length-1;j>=i-1;j--)//判断插入位置
		{
			L->elem_array[j+1]=L->elem_array[j];//将所插位置之后的元素向后移动
		}
		L->elem_array[i-1]=e;//插入元素
		L->length++;//表加长
		return OK;
	}
}
  • 线性表的删除:(在顺序表中删除所处i位置的元素)
Status Delete_Sqlist(Sqlist *L,int i)
{
	int k;
	ElemType x;
	if(L->length==0)
	{
		printf("list is NULL!\n");
		return ERROR;
	}
	if(i<1||i>L->length)   return ERROR;
	else
	{
		x=L->elem_array[i-1];
		for(k=i;k<L->length;k++)
		{
			L->elem_array[k-1]=L->elem_array[k];//将删除元素后的元素向前移动
		}
		L->length--;
		return x;
	}
}
  • 顺序表的输出:
Status Print_Sqlist(Sqlist *L)
{
	for(int j=0;j<L->length;j++)
	{
		printf("E[%d]=%d   ",j,L->elem_array[j]);
	}
	return OK;
}
  • 完整代码如下所示:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
#define OK 1
#define ERROR -1

typedef int ElemType;
typedef int Status;

typedef struct Sqlist
{
	ElemType *elem_array;
	int length;
	int listsize;	
}Sqlist;

Status Init_Sqlist(Sqlist *L)
{
	L->listsize=MAX_SIZE;
	L->elem_array=(ElemType *)malloc(MAX_SIZE*sizeof(ElemType));
	if(!L->elem_array)
	{
		L->elem_array=NULL;
		return ERROR;
	}
	else
	{
		L->length=0;
		return OK;
	}
}

Status Create_Sqlist(Sqlist *L,int n)
{
	int m;
	L->length=1;
	printf("input:\n");
	for(int i=0;i<n;i++)
	{
		scanf("%d",&m);
		L->elem_array[i]=m;
		L->length++;
	}
	return OK;
}

Status Insert_Sqlist(Sqlist *L,int i,ElemType e)
{
	int j;
	if(i<0||i>L->length-1)   printf("ERROR");
	else
	{
		for(j=L->length-1;j>=i-1;j--)
		{
			L->elem_array[j+1]=L->elem_array[j];
		}
		L->elem_array[i-1]=e;
		L->length++;
		return OK;
	}
}

Status Delete_Sqlist(Sqlist *L,int i)
{
	int k;
	ElemType x;
	if(L->length==0)
	{
		printf("list is NULL!\n");
		return ERROR;
	}
	if(i<1||i>L->length)   return ERROR;
	else
	{
		x=L->elem_array[i-1];
		for(k=i;k<L->length;k++)
		{
			L->elem_array[k-1]=L->elem_array[k];
		}
		L->length--;
		return x;
	}
}

Status Print_Sqlist(Sqlist *L)
{
	for(int j=0;j<L->length;j++)
	{
		printf("E[%d]=%d   ",j,L->elem_array[j]);
	}
	return OK;
}

int main()
{
	Sqlist *L;
	int j;
	L=(Sqlist *)malloc(sizeof(Sqlist));
	Init_Sqlist(L);
	Create_Sqlist(L,8);//创建具有8个元素的顺序表
	Print_Sqlist(L);
	Insert_Sqlist(L,5,-2);在第5这个位置插入-2
	printf("\n");
	printf("after insert:\n");
	Print_Sqlist(L);
	Delete_Sqlist(L,4);删除第4这个位置上的元素
	printf("\n");
	printf("after delete:\n");
	Print_Sqlist(L);
	return 0;
}
  • 代码运行结果如下:
  • 线性表结构之顺序表的基本操作
相关标签: 顺序表