#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define OVERLOW -2
typedef int ElemType;
typedef int Status;
typedef struct sqlist{
ElemType data;//数据域
struct sqlist *next;//指针域
}SqList;
//得到该线性表的长度
int GetLen(SqList *L){
if(!L){
printf("线性表为空,可能未创建或被销毁\n");
return ERROR;
}
int len=0;
while(L!=NULL){
len++;
L = L->next;
}
return len;
}
//打印线性表的信息
Status PrintSqList(SqList *L){
// int GetLen(SqList *L); //声明要调用的函数,如果该函数在本函数的上面,那么就可以不用声明
if(!L){
printf("线性表为空,可能未创建或被销毁\n");
}
int len=GetLen(L);
printf("长度:%d\n",len);
printf("元素列表:");
while(L!=NULL){
printf("%d,",L->data);
L=L->next;
}
printf("\n");
return OK;
}
//初始化线性表
SqList * InitSqList(SqList *L){
L=(SqList *)malloc(sizeof(SqList));//作为头结点
L->data=-1;
L->next=NULL;
return L;
}
//对该线性表添加内容
SqList * AddElem(SqList *L,ElemType e,int i){
if(!L){
printf("线性表为空,可能未创建或被销毁\n");
return NULL;
}
int length=GetLen(L);
if(i<1 || i>length+1){//可以插入在最后
printf("插入的位置错误,不在线性表的范围之内");
return L;
}
SqList *head=L;
SqList *temp=(SqList *)malloc(sizeof(ElemType));
temp->data=e;
for(int j=0;j<=length;j++){
if(j==i-1){//第一个
temp->next=L->next;
L->next=temp;
}
L=L->next;
}
return head;
}
//对该线性表删除第几个元素
SqList * DelElem(SqList *L,int i){
if(!L){
printf("线性表为空,可能未创建或被销毁\n");
return NULL;
}
int length=GetLen(L);
if(length==0){
printf("表已经为空,不用进行删除操作\n");
}
if(i<1 || i>length){
printf("删除的位置有误,不在线性表的范围之内\n");
}
SqList *head=L;
for(int j=0;j<length;j++){
if(j==i-2&&j>0 ||j==i-1&&j==0){//得到当前删除的前一个节点,
SqList *temp=L->next;
L->next=L->next->next;
free(temp);//释放要删除的节点
return head;
}
L=L->next;
}
return head;
}
//取得第几个元素,在当前线性表中
ElemType GetElem(SqList *L,int i){
if(!L){
printf("线性表为空,可能未创建或被销毁\n");
return NULL;
}
int length=GetLen(L);
if(i<1 || i>length){
printf("获得元素的位置有误,不在线性表的范围之内\n");
return OVERLOW;
}
SqList *p=L->next;//获得第一个元素 ,因为L是为头结点而不是第一个元素
for(int j=0;j<length;j++){
if(j==i-1){
return p->data;
}
p=p->next;
}
return ERROR;
}
int main(){
SqList *L;
L=InitSqList(L);
PrintSqList(L);
AddElem(L,8,1);
PrintSqList(L);
AddElem(L,4,1);
PrintSqList(L);
// DelElem(L,1);
// PrintSqList(L);
int e=GetElem(L,1);
printf("%d\n",e);
return 0;
}