线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素(数据单元之间的关系是可以连续的,也可以是不连续的)。
#include <stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef int Status ;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode;
typedef LNode* LinkList; //指向单链表的指针
Status initList(LinkList *L)
{
(*L) = (LinkList)malloc(sizeof(LNode));
if(!(*L))
exit(OVERFLOW);
(*L)->next = NULL;
return OK;
}
Status insertElement(LinkList L, int i, ElemType e)
{
LinkList p, s;
int j;
p = L;
j = 0;
while(p && j<i-1) //寻找第i-1个结点
{
p = p->next;
++j;
}
if(!p || j>i-1)
return ERROR;
s = (LinkList)malloc(sizeof(LNode));
if(!s)
exit(OVERFLOW);
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
Status getElement(LinkList L, int i , ElemType &e){
LinkList p = L;
int j = 0;
while(p && j<i){
p = p->next;
++j;
}
if(!p || j>i)
return ERROR;
e = p->data;
return OK;
}
Status deleteElement(LinkList L , int i , ElemType &e){
LinkList p = L , s;
int j = 0 ;
while (p && j<i){
p = p->next;
++j;
}
if(!p->next || j>i)
return ERROR;
e = p->data;
s = p->next;
p->next = s->next;//(相当于p->next = p->next->next)
return OK;
}
Status updateElement(LinkList L , int i , ElemType e){
LinkList p = L;
int j = 0 ;
while ( p && j<i){
p = p->next;
++j;
}
if(!p || j>i)
return ERROR;
p->data = e;
return OK;
}
//按照下标查找,返回该位置的值与getElement方法重合
/*Status locateElement(LinkList L , int i , ElemType &e){
LinkList p = L;
int j = 0;
while( p && j<i-1){
p = p->next;
++j;
}
if(!p || j>i)
return ERROR;
e = p->data;
return OK;
}*/
//按照数值查询,返回该数值的下标
int LocateElement(LinkList L , ElemType e){
LinkList p = L;
int j = 0;
while (p && p->data != e ){
p = p->next;
++j;
}
return j;
}
int main (){
LinkList l;
initList(&l);
int e , e1;
//ElemType j =0;
insertElement(l , 0 , 12);
insertElement(l , 1 , 4);
insertElement(l , 2 , 55);
insertElement(l , 3 , 555);
updateElement(l, 2 , 44);
deleteElement(l , 2 , e);
getElement(l , 2 , e1);
ElemType g = 555;
int j = LocateElement(l , g);
printf("值为:%d\n", j);
printf("%d\n", e);
printf("%d\n", e1);
}