线性表的链式表示和实现
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
每个数据元素由两部分构成:数据域,和指针域。
用c语言表示为:
1 typedef struct LNode{ 2 Elemtype data; 3 stuct LNode *next; 4 } LNode, *LinkList;
当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
1 #define OK 1 2 #define ERROR 0 3 int GetElem_L(LinkList L, int i, ElemType &e){ 4 // L为带头结点的单链表的头指针。 5 // 当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR 6 LinkList p = L->next; 7 int j=1; 8 while(p && j<i){ 9 p = p->next; 10 ++j; 11 } 12 13 if( !p || j>i ) return ERROR; 14 e = p->data; 15 return OK; 16 17 }
链表的插入操作
1 int ListInsert_L(LinkList &L, int i, ElemType e){ 2 // 在带头结点的单链线性表L中第i个位置之前插入元素e 3 LinkList p = L; 4 j= 0; 5 while(p&&j<i-1){ 6 p = p->next; 7 ++j; 8 } 9 if(!p || j>i-1) return ERROR; 10 LinkList s = (LinkList)malloc(sizeof(LNode)); 11 s->data = e; 12 s->next = p->next; 13 p->next = s; 14 return OK; 15 }
链表的删除操作
1 int ListDelete_L(LinkList L,int i){ 2 LinkList p = L->next; 3 int j = 1; 4 while(p && j<i-1){ 5 p = p -> next; 6 ++j; 7 } 8 if(!p || j>i) return ERROR; 9 LinkList q = p->next; 10 p->next = p->next->next; 11 free(q); 12 return OK; 13 }
创建表
1 int ListCreate_L(LinkList &L, int n){ 2 L = (LinkList)malloc(sizeof(LNode)); 3 L->next = NULL; 4 for(int i = n;i>0;i--){ 5 LinkList p = (LinkList)malloc(sizeof(LNode)); 6 scanf(&p->data); 7 p -> next = L-> next; 8 L->next = p; 9 } 10 }
java语言的实现
1 public class LinkList{ 2 class Element{ 3 public Object value = null; 4 public LinkList next = null; 5 } 6 7 class Value{ 8 public String s1 = null; 9 public Stirng s2 = null; 10 public Value(String s1, String s2){ 11 this.s1 = s1; 12 this.s2 = s2; 13 } 14 } 15 16 private Element header = null; 17 }