线性表的链式表示与基本操作
1.初始化
初始化带头结点的单链表
1 2 3 4 5 6 7 8 9 10 11 12 13
| int InitLinkList(LinkList &L) { L=(LinkList)malloc(sizeof(LNode)); if(L!=NULL) { L->next=NULL; return OK; } else { return ERROR; } }
|
2.采用头插法
建立单链表
特点:每次在头结点后插入新结点
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| LinkList CreatList1(LinkList &L){ LNode *node;int x=0; if(!L) InitLinkList(L); scanf("%d",&x); while(x!=9999){ node=(LNode *)malloc(sizeof(LNode)); node->data=x; node->next=L->next; L->next=node; scanf("%d",&x); } return L; }
|
3.采用尾插法建立单链表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| LinkList CreatList2(LinkList &L){ LNode *node;int x;LNode *r=L; if(!L) InitLinkList(L); scanf("%d",&x); while(x!=9999){ node=(LNode *)malloc(sizeof(LNode)); node->data=x; r->next=node; r=node; scanf("%d",&x); } r->next=NULL; return L; }
|
4.按序号查找结点值
从第一个结点出发,顺着next指针逐个往后搜索,直到找到第i个结点,返回该结点,若不存在,则返回NULL
1 2 3 4 5 6 7 8 9 10 11 12 13
| LinkList GetElem(LinkList L,int i){ int j=1; LNode *p=L->next; if(i==0) return L; if(i<1) return NULL; while(p&&j<i){ p=p->next; j++; } return p; }
|
5.按值查找结点值
从第一个结点出发,顺着next指针逐个往后搜索,直到找到结点值等于e的结点,返回该结点,若不存在,则返回NULL
1 2 3 4 5 6 7
| LinkList LocateElem(LinkList L,ElemType e){ LNode *p=L->next; while(p&&p->data!=e){ p=p->next; } return p; }
|
6.插入结点操作
目标:将值为x的新结点插入到单链表的第i个位置上
1 2 3 4 5 6 7 8
| LinkList insertforlist(LinkList &L,int x,int i){ LNode *p=GetElem(L,i-1);LNode *node; node=(LNode *)malloc(sizeof(LNode)); node->data=x; node->next=p->next; p->next=node; return node; }
|
7.删除结点操作
目标:将单链表的第i个位置上结点删除
1 2 3 4 5 6
| LinkList DeleteElem(LinkList &L,int i){ LNode * p=GetElem(L,i-1);LNode *q; q=p->next; p->next=q->next; free(q); }
|
8.求单链表长度
目标:统计单链表的长度(即包含多少节点)
1 2 3 4 5 6 7 8 9 10
| int ListLength_L(LinkList L){ LNode *p;int i=0; p=L->next; while(p){ i++; p=p->next; } return i; }
|
未完待续。。