您的位置:首页 > 其它

【高级语言程序设计期末复习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,在已经排好序的链表中进行数据插入。
以下给出核心代码,并用注释进行部分解释。(不可以直接运行)

(机房马上关门,明天再进行补充)

链表的考查方式基本如上所示。之后可能会继续补充链表排序方式。

以上内容为本人原创,第一次写博客,如有内容不周全或者错误的地方,欢迎指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐