链表
来源:互联网 发布:java 对url encode 编辑:程序博客网 时间:2024/06/15 14:02
#include <stdio.h>#include <malloc.h> typedef struct LNode *List;struct LNode{ int Data; List Next;};struct LNode L;List PtrL;/*用链表遍历的方法求表长,时间复杂度为O(n)*/ int Length(List PtrL){ List p=PtrL;//p指向表的第一个结点 int j=0; while(p){ p=p->Next;//当前p指的是第j个结点 j++; } return j;} /*按序号查找*/List FindKth(int K,List PtrL){ List p=PtrL; int i=1; while(p!=NULL&&i<K){ p=p->Next; i++; } if(i=K) return p; else return NULL;}/*按值查找*/List Find(int X,List PtrL){ List p=PtrL; while(p!=NULL&&p->Data!=X){ p=p->Next; } return p; } /*插入操作,平均查找次数n/2*/ List Insert(int X,int i,List PtrL){ List p,s; if(i==1){ //新结点插在表头 s=(List)malloc(sizeof(struct LNode)); //申请、填装表头 s->Data=X; s->Next=PtrL; return s; //返回新表头指针 } p=FindKth(i-1,PtrL);//查找第i-1个结点 if(p=NULL){ //第i-1个结点不存在,不能插入 printf("参数错误"); return NULL; } else{ s=(List)malloc(sizeof(struct LNode)); //申请,填装结点 s->Data=X; s->Next=p->Next; //新结点插入在第i-1个结点后面 p->Next=s; return PtrL; } }/*删除操作*/ List Delete(int i,List PtrL){ List p,s; if(i==1){ //如果要删除的是第一个结点 s=PtrL; //s指向第一个结点 if(PtrL!=NULL) //从链表中删除 PtrL=PtrL->Next; else return NULL; } p=FindKth(i-1,PtrL); //查找第i-1个结点 if(p==NULL){ printf("第%d个结点不存在",i-1); return NULL; }else if(p->Next==NULL){ printf("第%d个结点不存在",i); return NULL; }else{ s=p->Next; //s指向第i个结点 p->Next=s->Next; //从链表中删除 free(s); //释放被删除的结点 return PtrL; } } /*输出整个顺序表*/void ListTraverse(List PtrL){ List p; p=PtrL; while(p) { printf("%5d",p->Data); p=p->Next; } return;} int main() { return 0; }
阅读全文
0 0
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- Error:Could not run build action using Gradle installation解决办法
- Online Hard Example Mining
- 1-3 beanstalkd参数
- vue2.x 中如何获取 DOM
- Leetcode 368 Largest Divisible Subset
- 链表
- SSIS DSN contains an architecture mismatch between the Driver and Application
- 利用nodejs制作爬虫获取数据的案例
- LayoutInflater源码最简解读 带你轻松领略源代码之美
- string初始化
- 移植Linux 3.4.2 内核
- jsp/servlet 回顾学习
- ios 总结
- STM32之中断与事件---中断与事件的区别