版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}