单链表的基本操作(二)——沐雨先生

发布于:2022-12-11 ⋅ 阅读:(296) ⋅ 点赞:(0)

C、数据结构

目录

一、实验目的

二、实验内容

三、源代码

四、运行结果

五、实验小结

一、实验目的

        1、理解单链表的结构特点。

        2、掌握单链表的基本操作。

 二、实验内容

        2、将一个带头结点单链表就地逆置

        程序编制上的提示,仅供参考(其中很多代码可以借鉴实验内容1):

#include <stdio.h>
#include <stdlib.h>
typedef     struct  LNode{
     int      data;
     struct   LNode *next;
}LNode,*LinkList;
LinkList createList (LinkList  L,int n){
    //创建一个含有n个结点的带头结点的单链表
    ……
    return L;
}
void  showList (LinkList L){
   //能够输出带头结点的单链表L中的各个结点的值
   ……
}
void   reverse_L(LinkList   L){
     //将一个带头结点单链表L就地逆置
     ……
}
main() {
     LinkList L=NULL;
     L=createList(L,6);
     showList (L);
     reverse_L (L);
     printf(“\n 逆置后的结果是:\n”);
     showList (L);   
}

注:程序运行时如输入(假设采用头插法创建的链表):6 5 4 3 2 1,

输出结果如下:  1  2  3  4  5  6

逆置后的结果是:6  5  4  3  2  1

三、源代码

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;//声明

LinkList createList(LinkList L,int n){//尾插法
	int i;
	LinkList p,q;
	L=(LinkList) malloc (sizeof(LNode));
	L->next=NULL;
	q=L;
	for(i=1;i<=n;i++){
		p=(LinkList) malloc (sizeof(LNode));
		scanf("%d",&p->data);
		q->next=p;
		q=p;
	}
	q->next=NULL;
	return L;
}

void showList(LinkList L){//输出带头结点的单链表L中各个结点的值,不包括头结点
	LinkList p;
	p=L->next;
	while(p){
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
}

void reverse_L(LinkList L){//将带头结点的单链表L就地逆置
	LinkList p,q,r;
	p=L->next;
	q=p->next;
	p->next=NULL;
	while(q){
		//printf("%d",p->next);
		L->next=q;
		r=q->next;
		q->next=p;
		p=L->next;
		q=r;
	}
}

void main(){
	LinkList La=NULL;
	La=createList(La,5);//创建带头结点单链表La,如果需要La递增,注意自己录入数据的次序
	showList(La);//显示带头结点单链表La中各个结点的值
	//可以用类似的方法创建带头结点的单链表Lb
	reverse_L(La);//释放La中的各个结点(包括头结点)
	showList(La);
}

四、运行结果

 五、实验小结

1.在编写程序的过程中要静心思考,配合画图,更加直观形象地找出问题或理解程序。

2.在程序中做出了很多批注,帮助理解。

与上次试验的程序作比较,理解结构体类型带指针定义与不带的区别。

//LNode是结构体类型名,*LinkList是指向结构体的普通指针,相当于LNode *LinkList这样的定义,LNode *p中p是结构体指针,非普通指针,LinkList p中p是普通指针,指向LNode类型结构体的指针.

4.在输入或者书写代码时注意大小写的区分,养成规范良好的习惯,上下文保持一致,多注意上文所定义的函数名。

本文含有隐藏内容,请 开通VIP 后查看

微信公众号

今日签到

点亮在社区的每一天
去签到