順序表
頭文件: 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;
}