数据结构 C语言版 实验3 单链表的基本操作实现

数据结构 C语言版

实验3 单链表的基本操作实现

(1)实验目的

通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。和实验3对比,掌握线性结构两种不同存储方式的区别。

(2)实验内容

编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。注意,每个功能模块一定要考虑非法的情况,并作出相应的提示,例如:求前驱,要分别能够测试第一个元素的前驱、其他正常的元素的前驱、输入一个在表中不存在的元素求其前驱,这三种情况应给出相应的提示语和结果值;插入和删除时要考虑插入或删除的位置是否合法等。

(3)实验要求:

菜单项包括:
1.初始化或重置链表
2.销毁链表
3.清空链表
4.链表长度
5.指定位置的元素值
6.链表已存在元素的位序
7.求输入元素的直接前驱
8.求输入元素的直接后继
9.在第i个位置插入一个元素
10.删除第i个元素
11.输出有的链表元素
12.初始化并用头插法(或尾插法)输入元素
13.实现单链表的逆序存放
要求:所有的提示语和输出语句不允许出现在自定义的函数中,只能在main函数中出现提示语。
注:销毁链表时需要循环释放每个结点所占用的空间。
注:求前驱是指,输入一个元素值(而不是位置),求该元素在顺序表中的直接前驱元素值。求后继是指:输入一个元素值(而不是位置),求该元素在顺序表中的直接后继元素值。

(4)验收/测试用例

      *参考实验二*

主要源代码

#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;
int flag=0;
int len,a[100];
typedef struct Lnode {
   
	int data;
	struct Lnode *next;
} Lnode, *Linklist;
void InitList (Linklist *L) {
   //初始化一个空的链表
//二级指针的目的是地址传递,因为该函数没有返回值,用地址传递带回头节点地址。
	Linklist p;
	p = (Linklist)malloc(sizeof(Lnode));
	if(p == NULL)
		cout << "申请内存空间失败。" << endl;
	p->next=NULL;
	*L = p;
	flag=1;
}
int DestroyList(Linklist L) {
   //销毁链表
	Lnode *p;
	p=NULL;
	if(L && flag!=0) {
   
		while(L!=NULL) {
   
			p=L->next;
			free(p);
			L=L->next;
		}
		cout << "链表已销毁。" << endl;
	} else
		cout << "链表不存在。" << endl;
	return 1;
}
int List_empty(Linklist L,int just) {
    //清空链表

	if(just!=0) {
   
		while(L->next!=NULL) {
   
			Linklist t;
			t=L->next;
			L->next=t->next;
			free(t);
		}
		cout<<"链表已清空"<<endl;
	} else {
   
		cout<<"链表不存在。"<<endl;
	}
	return 1;
}
void ListLength(Linklist L) {
   //输出链表的长度.
	int i=0;
	Linklist p;
	p=L;
	while(p->next!=NULL) {
   
		i++;
		p=p->next;
	}
	cout << "链表中共有" << i << "个元素。" << endl;
}
void Creatlist(Linklist L,int n) {
   //创建链表
	int i;
	Lnode *p,*pt;
	pt=L;
	for(i=1; i<=n; i++) {
   
		p=(Linklist)malloc(sizeof(Lnode));
		
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值