单链表基本操作的实现
程序员文章站
2022-06-02 19:42:19
插入节点图解 s->next = p->next; p->next = s; 创建节点 1 typedef struct Lnode 2 { 3 ElemType data; 4 struct Lnode * next; 5 } Lnode,*LinkList; 单链表的进本操作 1.创建链表 1 ......
插入节点图解
s->next = p->next; p->next = s;
创建节点
1 typedef struct lnode 2 { 3 elemtype data; 4 struct lnode * next; 5 } lnode,*linklist;
单链表的进本操作
1.创建链表
1 linklist creatlist() 2 { 3 linklist l = (linklist)malloc(sizeof(lnode)); 4 linklist ptai = l; 5 ptai->next=null; 6 l->next = null; 7 8 printf("input length:\n"); 9 scanf("%d",&l->data); 10 11 for(int i=1;i<=l->data;i++) 12 { 13 linklist pnew = new lnode; 14 printf("input %d data\n",i); 15 scanf("%d",&pnew->data); 16 17 ptai->next = pnew; //尾插法 18 ptai = pnew; 19 ptai->next = null; 20 } 21 22 return l; 23 }
2.遍历链表
1 void traverse(linklist l) 2 { 3 linklist p = l; 4 while(p->next!=null) 5 { 6 printf("%d ",p->next->data); 7 p=p->next; 8 } 9 printf("\n"); 10 }
3.插入节点
status insertlist(linklist l,int local,elemtype &e) { if(local<1||local>(l->data+1)) { printf("invalid input\n"); //判断插入的未知是否有效 return false; } linklist p = l; for(int i=1;i<local;i++) { p = p->next; } linklist s = new lnode; s->data = e; s->next = p->next; p->next = s; l->data++; //插入后长度加1 return true; }
4.删除节点
1 status deletelist(linklist l,int pos) 2 { 3 if(pos<1||pos>l->data) 4 { 5 printf("invalid input\n"); 6 return false; 7 } 8 9 linklist p = l; 10 for(int i=1;i<pos;i++) 11 { 12 p = p->next; 13 } 14 15 p->next = p->next->next; 16 l->data--; 17 18 return true; 19 20 }
5.单链表的取值
1 int getval(linklist l,int pos) 2 { 3 if(pos<1||pos>l->data) 4 { 5 printf("invalid input\n"); //判断查找的位置是否合理 6 return 0; 7 } 8 9 linklist p = l; 10 for(int i=1;i<pos;i++) 11 { 12 p = p->next; 13 } 14 15 return p->next->data; //返回查找的值 16 }
6.单链表的查找
1 int getpos(linklist l,elemtype val) 2 { 3 linklist p = l; 4 for(int i=1;i<=l->data;i++) 5 { 6 p = p->next; 7 if(p->data==val) 8 { 9 return i; //返回值的位置 10 } 11 12 if(i==l->data) 13 { 14 return 0; //若没找到,返回0 15 } 16 } 17 }
上一篇: 长乐国庆集训Day3