一、线性表
2、线性表——链表
2.1类型定义及说明
# include "stdafx.h"
# include "malloc.h"
typedef int ElemType;
typedef int status;
2.2链表结点的定义
> typedef struct LNode {
> ElemType data;
> struct LNode *next;
> }LNode,*Linklist;
2.3基本操作
注:链表的许多操作与顺序表思路大同小异,这里挑几个特别的实现
2.3.1链表的头插法
void CraeteList_Head(Linklist &L) { Linklist p; int data; L = (Linklist)malloc(sizeof(LNode)); L->data = 0; L->next = NULL; while (1) { scanf("%d", &data); if (data == 32767)break; p = (Linklist)malloc(sizeof(LNode)); p->data = data; p->next = L->next; L->next = p; } }
2.3.2链表的尾插法
void CraeteList_Tail(Linklist &L) { Linklist p,cur; int data; cur = (Linklist)malloc(sizeof(LNode)); cur->data = 0; cur->next = NULL; L = cur; while (1) { scanf("%d", &data); if (data == 32767)break; p = (Linklist)malloc(sizeof(LNode)); p->data = data; p->next = cur->next; cur->next = p; } }
2.3.3删除结点
void Delete_LinkList_Node(Linklist &L,int key) { Linklist p = L,q = L->next; while (q != NULL) { if (q->data == key) { p->next = q->next; free(q); q = p->next; } else { p = q; q = q->next; } } }
2.3.4链表的遍历
void Travel_L(Linklist L) { Linklist p; p = L; while (p != NULL) { printf("%d\r\n", p->data); p = p->next; } }
2.4附:主函数
int main()
{
Linklist L1,L2;
CraeteList_Head(L1);
Travel_L(L1);
CraeteList_Tail(L2);
Travel_L(L2);
return 0;
}
说明
下一节讲解栈的实现与操作。