【高级语言程序设计期末复习No.1】动态链表的建立,输出,插入和删除
来源:互联网 发布:中国软件服务市场 编辑:程序博客网 时间:2024/05/22 01:52
为了应对6月16日的期末考试,特推出此专栏博客。
期末考试共五道大题,每题20分,分别考察数组,字符串,结构体,指针,链表。
因为链表本身较为复杂,属于一个难点,但是考察内容不会很复杂,因此首先对链表进行讨论。
以下给出最基本的链表输入输出代码。
例题1:建立一个链表,输入一组不定的数值,当输入0的时候停止输入并在一行输出所有已经输入的数字。
这是最基本的链表输入输出题目。以下给出最基础的代码。
#include <stdio.h>#include <stdlib.h>struct data{ int abc; struct data * next;} ab;int main(){ struct data *head; struct data *p1,*p2,*p; int n=0; p1=p2=(struct data*)malloc(sizeof(struct data)); scanf("%d",&p1->abc); head=NULL; while(p1->abc!=0) { n=n+1; if(n==1)head=p1; else p2->next=p1; p2=p1; p1=(struct data*)malloc(sizeof(struct data)); scanf("%d",&p1->abc); } p2->next=NULL; printf("Hello world!\n"); p=head; if(head!=NULL) do { printf("%d ",p->abc); p=p->next; } while(p!=NULL); return 0;}malloc的头文件来自于stdlib,h文件里,但是本人亲测去掉stdlib头文件也可以正常运行程序。不过仍然建议加上本行头文件。
这个题目我们首先建立了一个结构体,名字叫data,里面包含两个元素,一个整型类型数据abc和一个指针变量。这个指针变量充当的作用就是把各个数据连接在一起形成链表。
接下来我们在主函数里定义了几个结构体指针变量,head,p1,p2,p,其中前三个用于链表的构建,最后一个用于链表的输出。
n用于计数,可以在程序结束的时候尝试输出n,代表输入的数据个数。
接下来就是链表的创建过程。链表的创建过程我们可以理解为p1和p2的移动连接建设。
首先我们开辟一个新单元,利用malloc函数。这个函数的作用就是开辟新单元用于储存数据,在链表中使用格式类似于上面的程序。链表则就是由n个这种单元连接起来的。
其次输入第一个数据。p1->abc则代表p1指向的结构体中的名字为abc的数值。
然后我们让头指针指向NULL,此处的意思是空。
紧接着如果输入的数据不是0,我们开始进行一段循环,来依次输入接下来的数值。在这个循环中,循环进行一次,n就增大1,起到计数的作用。
在这个循环里我们要判断是不是头指针。如果是头指针,我们需要让head指向新开辟的节点,也就是令head=p1。让p2指向p1,保证紧跟p1(p2=p1),然后我们再开辟一个结点让p1指向它,接着输入这个节点的数据。
如果不是头指针,我们就让新结点地址赋给第一个节点的next,因为p2紧随其后,所以也就是p2->next=p1。接着让p2指向刚建立的结点(p2=p1),p1继续开辟新节点,重复循环,直到输入的数据是0。
等到输入的数据为0时结束循环,让p2所在的位置的指针指向null。此时p1已经开辟了新单元,只不过这个单元里值为0,因此不需要连接到链表里。
这样的话链表构建就完成了。
我们在这个位置让电脑输出helloworld来判读a女程序进展到了何种地步。
接下来是输出,输出稍微好理解一些。
让p先等于头指针,只要头指针不为空,也就是第一个数据不是0就输出下面的数据。输出的过程中每次让p指向下一个结点(p=p->next),当p不是空地址就继续循环输出,直到空地址停止输出。
以上就是最基础的链表建立和输出。
例题2:输入num,删除链表中的num数据。
以下给出核心代码,并用注释进行部分解释。(不可以直接运行)
int num;struct data *p1,*p2;p1=head;while(num!=p1->abc&&p1->next!=NULL)//p1指向的不是要找的而且后面还有节点{ p2=p1; p1=p1->next;//p1后移}if(num==p1->abc){ if(p1==head)head=p1->next; else p2->next=p1->next; printf("success");//显示删除成功 n=n-1;//计数减少一个}例题3:输入num,在已经排好序的链表中进行数据插入。
以下给出核心代码,并用注释进行部分解释。(不可以直接运行)
(机房马上关门,明天再进行补充)
链表的考查方式基本如上所示。之后可能会继续补充链表排序方式。
以上内容为本人原创,第一次写博客,如有内容不周全或者错误的地方,欢迎指正。
- 【高级语言程序设计期末复习No.1】动态链表的建立,输出,插入和删除
- 【高级语言程序设计期末复习No.2】数组与字符串
- C 动态链表的建立,输出,删除,插入
- 链表的建立、插入和删除
- 链表的建立、插入和删除
- 链表建立输出删除插入的综合实例
- 链表的简单操作(建立,输出,插入,删除)
- 链表建立,插入,删除,输出,释放
- 链表建立,插入,删除,输出
- 链表建立,插入,删除,释放,输出
- 链表建立,插入,删除,输出
- 链表建立,插入,删除,输出
- 一个链表程序,支持建立,插入,删除,输出;学生的学号和分数
- 【高质量代码实践】【链表】链表的建立,查找,删除,插入和输出
- 单向动态链表的建立、插入、删除、排序和保存
- 单向动态链表的创建、输入、插入、删除、输出
- 单向动态链表的创建、输入、插入、删除、输出
- C语言链表的插入和删除、建立
- 理解copy和deepcopy
- Export/Import Points将点以txt格式输出、输入
- Ubuntu 在playonlinux上安装ps(补充:尚有问题未解决)
- 卡尔曼滤波以及opencv源代码分析
- DES加密解密---可执行完整版------(附2个版本RSA加密解密)
- 【高级语言程序设计期末复习No.1】动态链表的建立,输出,插入和删除
- Android性能最佳实践
- pat1101-1110
- iOS-UITableview性能优化
- cocos2d-x3.8骨骼动画加载
- sublime text 3 配置Python编译器
- mmap--最简单的测试程序(用户空间与内核空间数据交换&&用户态和内核态的数据交换用例)
- 170613 逆向-CrackMe之023
- Ubuntu 下deb包的安装方法