数据结构(一):顺序表的基本操作 C语言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39087263/article/details/82847735

顺序表

头文件: Sqlist.h

#include<stdio.h>
#include<stdlib.h>

#define SIZE 15
#pragma once
typedef struct Sqlist
{
	int elem[SIZE];
	int usedsize; //有效长度
} Sqlist, *Psqlist;

void InitSqlist(Psqlist List) ;//初始化

bool IsFull(Psqlist List);//判断是否为满

bool InsertVal(Psqlist List, int pos,int val);//在线性表中pos位置插入val值

bool DeleteVal(Psqlist List,int pos, int *val);//删除线性表的pos位置的值,并返回其val值

int FindVal(Psqlist List,int val);//查找线性表中与val值相同的元素,如果存在返回序号,不存在返回0表示失败

bool GetVal(Psqlist List,int pos,int*val);//将pos位置的值返回给val

void Clear(Psqlist List);//清空线性表

int GetLength(Psqlist List); //得到线性表长度

void Show(Psqlist List); //打印线性表有效值

Sqlist.cpp

#include<stdio.h>
#include<assert.h>
#include"Sqlist.h"

void InitSqlist(Psqlist List) 
{
	assert(List!=NULL);
	if(List == NULL)
	{
		return ;
	}
	List->usedsize = 0;
}

bool IsFull(Psqlist List)  //static bool IsFull
{
	assert(List!=NULL);
	if(List->usedsize == SIZE)
	{
		return true;
	}
	else
	{
		return false;
	}
}
/*插入元素*/
/*
1.线性表长度  ,超过数组长度,抛出异常 or  动态扩容
2.插入位置不对,抛出异常
3.将线性表元素从后向前遍历到pos位置,向后挪一位,将val值插入到Pos位置
*/
bool InsertVal(Psqlist List, int pos,int val)
{
	assert(List!=NULL);
	if(pos>=SIZE)
	{
		printf("The Size Is Not Enough");
		return false;
	}
	for(int i =List->usedsize;i>=pos;i--)
	{
		List->elem[i+1] = List->elem[i];
	}
	List->elem[pos] = val;
	List->usedsize++;  //记得要给usedsize +1!!!
	return true;
}

/*删除元素*/
bool  DeleteVal(Psqlist List,int pos, int *val) //删除线性表的pos位置的值,并返回其val值
{
	assert(List!=NULL);
	if(List->elem[pos] == NULL)
	{
		return false;
	}
	else
	{
		*val= List->elem[pos];
		for(int i = pos; i <List->usedsize ;i++)
		{
			List->elem[i] = List->elem[i+1]; 
		}
		List->usedsize --; //记得成功删除后给usedsize-1
		return true;
	}
}
/*查找元素*/
int  FindVal(Psqlist List,int val)//查找线性表中与val值相同的元素,如果存在返回序号,不存在返-1表示失败
{
	assert(List!=NULL);
	for(int i =0;i<List->usedsize;i++)
	{
		if(List->elem[i] == val)
		{
			return i;
		}
	}
	return -1;
}

/*得到元素*/
bool GetVal(Psqlist List,int pos,int*val)//将pos位置的值返回给val
{
	assert(List!=NULL);
	if(pos>List->usedsize || pos<0)
	{
		return false;
	}
	else
	{
    	*val =List->elem[pos];
		printf("%d",*val); //  之前错误:  &val  ,打印出的是地址 ,应该传递的是指针直接指向该值  哎呀傻了我!!!记住    		
	}
	return true;
}

void Clear(Psqlist List)//清空线性表
{
	List->usedsize = 0;
}

int  GetLength(Psqlist List) //得到线性表长度
{
	
	assert(List!=NULL);
	return List->usedsize;
}

void Show(Psqlist List) //打印线性表有效值
{
	assert(List!=NULL);
	for(int i= 0;i<List->usedsize;i++)
	{
		printf("%d\n",List->elem[i]);
	}
}

int main()
{
	Sqlist List;
	InitSqlist(&List);
	for(int i =0;i<5;i++)
	{
		InsertVal(&List,i,i);
	}
	 InsertVal(&List,5,9);
	int val ;
   //DeleteVal(&List,2,&val);
	//printf("the deletevalon pos 2  is  %d\n",val);

	//printf("the length of the List is %d\n",GetLength(&List));

	//printf("the val which is same with 9  is on the   pos %d\n",FindVal(&List,9));
	//Show(&List);
	//Clear(&List);
	GetVal(&List,5,&val);
	//printf("the val on the pos 5 is %d",val);
	Show(&List);

	getchar();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_39087263/article/details/82847735