//单链表中节点类型的描述
typedef struct{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//头插法建立单链表
LinkList CreatList1(LinkList &L){
int x;
LNode *s;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //初始为空链表
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
//尾插法建立单链表
LinkList CreatList(LinkList &L){
int x;
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L; //r为表尾指针
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s; //r=r->next;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
//按序号查找结点值
LNode *GetElem(LinkList L,int i){
LNode *s=L->next; //头结点指针赋给s
if(i==0)
return L;
if(i<0||i>L.length)
return NUll; //i无效,返回NULL
while(s&&j<i){
s=s->next;
j++;
}
// for(int j=1;j<i;j++)
// s=s->next;
return s;
}
//按值查找表结点
LNode *LocateElem(LinkList L,ElemType e){
LNode *s=L->next;
while(s!=NULL&&s->data!=e)
s=s->next;
return s;
}
//插入结点操作
//将值为x的新结点 *s插入到单链表第i个位置
p=GetElem(L,i-1);
s->next=p->next;
p->next=s;
//将 *s插入到*p前边
s->next=p->next;
p->next=s;
temp=s->data;
s->data=p->data;
p->data=temp;
//删除结点操作
//删除第i个结点
p=GetElemtype(L,i-1);
q=p->next;
p->next=q->next;
free(q);
//删除结点*p
q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);
//双链表中结点类型的描述
typedef struct DNode{
ElemType data;
struct DNode *prior,*next;
}DNode,*DLinkList;
//双链表插入结点操作(在p之后插入结点*s)
p->next->prior=s;
s->next=p->next;
p->next=s;
s->prior=p;
//双链表删除结点操作(删除结点*p的后续结点*q)
q->next->prior=p;
p->next=q->next;
free(q);
//静态链表结构类型的描述
#define MaxSize 50
typedef struct{
ElemType data[MaxSize];
int next
}SLinkList[MaxSize];
链表
最新推荐文章于 2024-12-01 18:04:09 发布