数据结构实验一_线性表、顺序表基本操作的编程实现(C语言)

本文介绍了使用C语言实现线性表和顺序表的基本操作,包括添加、显示、修改、插入和删除数据。通过结构体指针管理和菜单驱动,实现了线性表的链式存储和顺序表的数组存储结构。程序提供了详细的功能说明和源码展示。
摘要由CSDN通过智能技术生成

一、实验题目

线性表、顺序表基本操作的编程实现

二、实验要求

线性表、顺序表基本操作的编程实现,掌握线性表、顺序表的建立、遍历、插入、删除、读取等基本操作的编程实现,也可以进一步编程实现逆序等操作,存储结构可以采用顺序存储结构和链表存储结构之一,可以依次完成主要功能来体现功能的正确性,用菜单进行管理完成大部分功能,要求可以重复运行。

三、运行效果图

在这里插入图片描述
在这里插入图片描述

四、程序基本功能

1、添加数据

函数名:adddata()
描述:从键盘上添加数据存入指针结构体中
入口参数:无
出口参数:无
说明:
线性表:定义两个结构体指针,在每次申请一个内存之后,输入数据,然后通过挂链表来添加数据

	printf("请输入实际数据(空格隔开):");
	for(i=0;i<adatanumber;i++)
	{
   
		newp=(struct link *)malloc(sizeof(struct link));
		scanf("%d",&newp->data);
		lastp->next=newp;
		newp->next=NULL;
		lastp=newp;
		countnumber++;
	}
		printf("添加操作成功!\n\n");
	}

在这里插入图片描述
顺序表:通过循环来往数组中输入数据

	printf("请输入实际数据(空格隔开):");
	for(i=0;i<adatanumber;i++)
	{
   
		scanf("%d",&dataarray[i]);
		countnumber++;
	}
	printf("添加操作成功!\n\n");

数组的数据显示方式为
在这里插入图片描述

2、显示数据

函数名:showdata()
描述:顺序表和线性表均通过循环来分别输出结点和数组中的数据。
入口参数:无
出口参数:无

3、修改数据

函数名:moddata()
描述:线性表和顺序表均通过countnumber来找到需要修改位置的地址,判断是否存在该信息,如果存在,输入新值直接覆盖原先的值。
入口参数:无
出口参数:无

4、插入数据

函数名:insertdata()
描述:在一串数据之中插入数据
入口参数:无
出口参数:无
说明:
线性表:首先找到需要插入的位置第n个点的地址newp
如果插入点为第一个位置:
(1)headp.next=insertp;(头结点指向插入点)
(2)insert->next=newp;(插入点指向第一个结点)
在这里插入图片描述
如果插入点为任意一个大于1的点:
(1)lastp为n-1个点的位置
(2)lastp->next=insertp;(第n-1个点指向插入点)
(3)insretp->next=newp;(插入点指向第n个点)

在这里插入图片描述
顺序表:首先找到要插入第n个数据的位置,然后从第n个数据开始,把第n个数据赋值给第n+1个,即:
在这里插入图片描述

5、删除数据

函数名:deldata()
描述:删除一串数据之中的某一个
入口参数:无
出口参数:无
说明:
线性表:首先找到需要删除的第n个点的位置newp
如果删除第一个结点:
(1)headp->next=newp->next;(头结点指向第n+1个点)
(2)free(newp);(释放第n个结点)
在这里插入图片描述
如果删除第n个结点:
(1)lastp为第n-1个点
(2)lastp=newp->next;(第n-1个点指向第n+1个点)
(3)free(newp);(释放第n个点)
在这里插入图片描述
顺序表:首先找到要删除那个点的地址,然后从后面开始依次覆盖前一个点
在这里插入图片描述

五、源码

1、线性表基本操作的编程实现

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
void showmenu(void);//菜单显示
void processmenu(void);//菜单控制
void adddata(void);//添加数据
void showdata(void);//显示数据
void moddata(void);//修改数据
void insertdata(void);//插入数据
void deldata(void);//删除数据
void readdata(void);//读取数据
void readlong(void);//读取长度
void invertdata(void);//反转数据
void freelist(void);//清空链表
struct link  //定义链表结构体
{
   
	int data;
	struct link *next;
};
struct link headp;//定义头结点
int countnumber=0;//次数
int main(void)
{
   
	system("color f0");//背景白色
	while(1)
	{
   
		showmenu();
		processmenu();
		system("pause");
		system("cls");
	}
}
void showmenu(void)
{
   
	puts("===========================");
	puts("  线性表基本操作的编程实现");
	puts("     操作软件:dev c++");
	puts("===========================");
	puts("\t1、添加");
	puts("\t2、显示");
	puts("\t3、修改");
	puts("\t4、插入");
	puts("\t5、删除");
	puts("\t6、读取特定数据");
	puts("\t7、统计数据个数");
	puts("\t8、数据反转");
	puts("\t0、退出程序");                                                                                                                                                                                                                                                                                                                                                                                                                
  • 55
    点赞
  • 297
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值