单链表创建,删除节点,获取元素(与线性表比较)

 1 //用c语言描述单链表 
 2 
 3 //缺点,比起线性表,找出第i个元素很困难,时间复杂度为o(n),线性表只要直接下标获取,时间复杂度为O(1)
 4 //优点,单链表的插入和删除时非常方便的,时间复杂度为o(1),线性表的插入和删除最后情况是删除和插入第一个元素,时间复杂度为o(n) 
 5 
 6 
 7 #include <stdio.h>
 8 typedef int ElemType;
 9 typedef int Status;
10 
11 //1.单链表的初始化 
12 
13 typedef struct Node  //定义一个节点 
14 {
15     ElemType data ;  //用来存储数据,数据域
16     struct Node *next ;//用来存放下一个节点的地址,指针域      
17 } Node;
18 typedef struct Node * LinkList;  //取别名,遇到LinkList相当于遇到Node 
19 
20 
21 //******************************************************************************* 
22 
23 //2.找出第i个元素
24 
25 Status GetElement(LinkList L,int i,ElemType *e)  
26 {
27     int j=1;   //记录当前位置 
28     LinkList p;
29     p=L->next;   //p指向单链表的第一个指针,必须为l->next,因为头节点没数据 
30     while(p && j<i)                                 //最坏情况是i=n,所以时间复杂度为o(n) 
31     {
32         p=p->next;   //把下一个节点的地址复制给p 
33         ++j;        //当前位置加1 
34      } 
35      
36     if(!p || j>i)   //若p为空或者j大于单链表的长度退出程序 
37        return -1; 
38 
39     *e=p->data; 
40     return *e;
41 } 
42 
43 //******************************************************************************* 
44 
45 //3.单链表的插入
46 
47 Status ListInsert(LinkList *L,int i,ElemType e) 
48 {
49     int j=1;   //记录当前位置 
50     LinkList p,s;
51     p=*L;   //p指向当前的地址,当头节点为空也能插入, 
52     while(p && j<i)                                 //最坏情况是i=n,所以时间复杂度为o(n) 
53     {
54         p=p->next;   //把下一个节点的地址复制给p 
55         ++j;        //当前位置加1 
56      } 
57        
58     if(!p || j>i)   //若p为空或者j大于单链表的长度退出程序 
59        return -1; 
60        
61     s=(LinkList) malloc(sizeof (Node));  //因为插入一个新元素,必须定义为一个节点才可以插入单链表中 
62     s->data =e;   //把e的值赋值给新的节点的data
63 
64     s->next=p->next;     //s的next指针存放的是p->next 的指针
65      
66     p->next=s;          //p->next指向s, 
67     
68     free s;
69         return 070 }
71 
72 
73 
74 
75 //******************************************************************************* 
76 
77  //4.单链表的删除  思想(p->next=p->next->next) 
78  Status ListDelete(LinkList L,int i,ElemType* e) 
79 {
80     int j=1;   //记录当前位置 
81     LinkList p,q;
82     p=*L;   //p指向当前的地址, 
83     while(p && j<i)                                 //最坏情况是i=n,所以时间复杂度为o(n) 
84     {
85         p=p->next;   //把下一个节点的地址复制给p 
86         ++j;        //当前位置加1 
87      } 
88     if(!p || j>i)   //若p为空或者j大于单链表的长度退出程序 
89        return -1; 
90     
91     
92     q=p->next;
93     p->next =q->next;  //这两句相当于p->next =p ->next ->next; 
94     
95      *e=q->date;
96      
97      return 0;
98 } 

比较简单,都写上注释,单链表我研究了一天,都没做出一道题目,就是在单链表中删除所有重复的节点,指针指来指去,头都晕,如果就是删除一个就简单,在单链表没有索引,所以只能靠指针,先排序再删除,现在我还没做出来,就差一步,先放着,做了那么久,累了。

转载于:https://www.cnblogs.com/biyongyao/p/5451268.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值