本篇文章是对线性表创建以及插入、删除元素等功能的编写。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10 //容纳的元素个数
#define false 0
#define true 1
#define error 0
#define ok 1
1.定义表的结构
typedef struct
{
/* data */
int *elem;
int listSize;
int len;
}Sqlist;
2.进行初始化
int InitList(Sqlist *L){
L->elem=(int *)malloc(MAXSIZE*sizeof(int));
if(!L->elem){
return error;
}
L->len=0;
L->listSize=MAXSIZE;
return ok;
}
3.插入元素
//i表示插入的位置,e表示元素
int ListInsert(Sqlist *L,int i,int e){
if(i<1 || i>MAXSIZE || L->len==MAXSIZE){
return false;
}
for(int j=L->len;j>=i;j--){
L->elem[j]=L->elem[j-1];
}
L->elem[i-1]=e;
L->len++;
return ok;
}
4.删除元素
//i表示删除元素的位置,e表示删除的元素
int ListDelete(Sqlist *L,int i,int *e){
if(i<1 || i>MAXSIZE || L->len==0){
return error;
}
*e=L->elem[i-1];
for(int j=i-1;j<(L->len-1);j++){
L->elem[j]=L->elem[j+1];
}
L->len--;
return ok;
}
5.遍历顺序表
void Bian(Sqlist L){
for(int i=0;i<L.len;i++){
printf("%d ",L.elem[i]);
}
}
6.判断表是否为空
int ListEmpty(Sqlist L){
if(L.len==0){
return true;
}
else{
return false;
}
}
7.清除顺序表
void ClearList(Sqlist *L){
L->len=0;
}
8.获取元素位置
int LocateElem(Sqlist L,int e){
int i;
for(i=0;i<L.len;i++){
if(L.elem[i]==e){
return i+1;
}
}
return 0;
}
9.表的长度
int ListLength(Sqlist L){
return L.len;
}
10.销毁表
int DestoryList(Sqlist *L){
free(L->elem);
L->elem=NULL;
L->len=0;
L->listSize=0;
return 1;
}
11.获取元素
//i为位置,e为元素
int GetElem(Sqlist L,int i,int *e){
if(i<1 || i>L.len){
return error;
}
*e=L.elem[i-1];
return ok;
}
12.主函数
int main(){
Sqlist L;
InitList(&L);
ListInsert(&L,1,1);
ListInsert(&L,2,2);
ListInsert(&L,2,3);
Bian(L);
int k=DestoryList(&L);
if(k==1){
printf("表已销毁!");
}
else{
printf("表未销毁!");
}
return 0;
}
13.运行截图
1 3 2 表已销毁!
[Done] exited with code=0 in 0.962 seconds
主函数可以根据自己的需求进行添加相应的功能,我已经将他们进行了测试,没得问题,所以就不列举啦!