链表

来源:互联网 发布:java多态的机制是什么 编辑:程序博客网 时间:2024/05/16 07:17
//单链表中节点类型的描述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 50typedef struct{ElemType data[MaxSize];int next}SLinkList[MaxSize];

原创粉丝点击