简单数据结构之链式表(C实现)

来源:互联网 发布:华罗庚软件 编辑:程序博客网 时间:2024/04/27 07:11
/* ============================================================================ Name        : Node.c Author      : ntsk13 beijiwei@qq.com Version     : Copyright   : GPL Description : Link list study, complement by C Date        : 2015.06.15 ============================================================================ */#include <stdio.h>#include <stdlib.h>typedef struct {int data;}Elem_t;typedef struct lnode{Elem_t e;struct lnode * next;}node,*pnode;void link_init(pnode * L);void link_clear(pnode *L);int link_get_length(pnode *L);Elem_t link_get_elem(pnode *L,int i);void link_traverse(pnode *L);void link_insert(pnode *L,Elem_t e,int i);void link_delete(pnode *L,int i);int main(void) {pnode H=NULL;//head pElem_t zero,one,two,three,four,five;zero.data=0;one.data=1;two.data=2;three.data=3;four.data=4;link_init(&H);link_insert(&H,zero,0);link_insert(&H,one,1);link_insert(&H,two,2);link_insert(&H,three,3);link_insert(&H,four,4);link_traverse(&H);printf("len is %d \n", link_get_length(&H) );five=link_get_elem(&H,4);printf("=================================\n");printf("five is %d \n",five.data );link_delete(&H,4);printf("=================================\n");link_traverse(&H);printf("len is %d \n", link_get_length(&H) );return EXIT_SUCCESS;}void link_init(pnode * L){*L=(node *)malloc(sizeof(Elem_t));//构造一个头结点((*L)->e).data =0;//头结点的data作为长度(*L)->next=NULL;}void link_clear(pnode *L){int i=0;pnode p=*L;pnode tmp=NULL;int len=( (*L)->e).data;for(i=0;i<len;i++){tmp=p->next;free(p);p=tmp;}*L=NULL;}int link_get_length(pnode *L){return ( (*L)->e).data;;}Elem_t link_get_elem(pnode *L,int i){int j=0;pnode p=(*L)->next;while(j <i ){j++;p=p->next;}return p->e;}void link_traverse(pnode *L){int i=0;pnode p=(*L)->next;//避免把头指针元素输出int len=( (*L)->e).data;for(i=0;i< len;i++){printf("The %dth elem is %d\n",i,(p->e).data);p=p->next;}}void link_insert(pnode *L,Elem_t e,int i)// before i insert{int j=0;pnode p=*L;pnode tmp=NULL;for(j=0;j< i;j++){p=p->next;}tmp=(node *)malloc(sizeof(Elem_t));(tmp->e).data=e.data;tmp->next=p->next;p->next=tmp;( (*L)->e).data++;}void link_delete(pnode *L,int i){int j=0;pnode p=(*L)->next;pnode tmp=NULL;for(j=0;j< i-1;j++){p=p->next;}tmp=p;p->next=p->next->next;( (*L)->e).data--;free(tmp->next);}


0 0
原创粉丝点击