【高级语言程序设计期末复习No.1】动态链表的建立,输出,插入和删除
2017-06-13 20:02
323 查看
为了应对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,在已经排好序的链表中进行数据插入。
以下给出核心代码,并用注释进行部分解释。(不可以直接运行)
(机房马上关门,明天再进行补充)
链表的考查方式基本如上所示。之后可能会继续补充链表排序方式。
以上内容为本人原创,第一次写博客,如有内容不周全或者错误的地方,欢迎指正。
期末考试共五道大题,每题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.2】数组与字符串
- YTU 2430: C语言习题 链表建立,插入,删除,输出
- C 动态链表的建立,输出,删除,插入
- 建立完整的单向动态链表(包括初始化、创建、插入、删除、查找、销毁、输出)
- 单链表的建立、求长、插入、删除、输出和释放 (带头结点)
- 链表建立输出删除插入的综合实例
- 单向链表的建立,插入,删除(复习一下)
- 双链表的建立、求长、定位、插入、删除、输出和释放(带头结点且成环状)
- 程序员面试宝典(第三版)——单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- C语言实现动态链表的创建、删除、插入、输出(CentOS6.5上调试成功)
- 链表的基本操作(C语言版):建立,插入,删除,查找,输出
- 链表建立,插入,删除,输出
- C语言习题 链表建立,插入,删除,输出
- 双链表的建立、求长、定位、插入、删除、输出和释放
- 链表的建立,输出,删除,插入运算的c语言实现
- 链表(建立+插入+删除+输出)
- 单向动态链表的创建、输入、插入、删除、输出
- 链表建立,插入,删除,输出,释放
- 程序员面试宝典(第三版)——单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置(转)
- 单链表建立(头插法,头插法,用数组),求长,插入,删除,输出,释放(递归释放和循环释放),归并(递增和递减)