• 数据结构:线性表基本操作和简单程序


    线性表基本操作和简单程序

    实验目的

    一、实验目的与基本要求
    1.掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。
    2.了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。
    3.掌握顺序表和链表的基本操作:插入、删除、查找以及表的合并等运算。
    4.掌握codeblock上机调试程序的基本方法及C语言编程。

    实验内容

    1.认真阅读和掌握和本实验相关的教材内容及所给的两个程序代码。
    2.建立顺序表,基本操作包括:初始化,建立一个顺序存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。
    3.建立单链表,基本操作包括:初始化,建立一个链式存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。
    4.用顺序表和链表分别设计输入一组数据(4,6,9,0,2,-25,14,3,-29),测试程序的如下功能:根据输入的数据,找到相应的存储单元并删除,并显示表中所有的数据,例如输入数据3,如果存在所在的数据中,删除,输出删除后的这组数据,否则,直接输出。

    顺序表代码

    #include <bits/stdc++.h>
    const int maxn=1e3+10;
    using namespace std;
    struct List
    {
    	int num;
    	int id;
    };
    typedef struct 
    {
    	List *place;
    	int len;
    }Node;
    // 初始化
    bool init(Node &a)
    {
    	a.place=new List[maxn];
    	if(!a.len)
    		return false;
    	a.len=0;
    	return true;
    }
    // 取值
    bool get_num(Node a,int b,List &c)
    {
    	if(!b||b>a.len)
    		return false;
    	c=a.place[b-1];
    	return true;
    }
    // 查找
    int find(Node a,int b)
    {
    	for(int i=0;i<a.len;i++)
    		if(a.place[i].num==b)
    			return i+1;
    	return 0;
    }
    // 插入
    bool insert(Node &a,int b,int c)
    {
    	if(b<1 || b>a.len+1 || a.len==maxn)
    		return false;
    	for(int i=a.len-1;i>=b-1;i--)
    		a.place[i+1]=a.place[i];
    	a.place[b-1].num=c;
    	a.len+=1;
    	return true;
    }
    // 删除
    bool Delete(Node &a,int b)
    {
    	if(b<1 || b>a.len)
    		return false;
    	for(int i=1;i<=a.len;i++)
    		a.place[i-1]=a.place[i];
    	a.len--;
    	return true;
    }
    int main(int argc, char const *argv[])
    {
    	Node L;
    	List g;
    	int n,m,ID;
    	cout<<"/*****************请输入要进行的操作的编号*****************/"<<endl;
    	cout<<"1->建立"<<endl;
    	cout<<"2->输入"<<endl;
    	cout<<"3->取值"<<endl;
    	cout<<"4->查找"<<endl;
    	cout<<"5->插入"<<endl;
    	cout<<"6->删除"<<endl;
    	cout<<"7->输出"<<endl;
    	cout<<"0->退出
    "<<endl;
    	while(1)
    	{
    		cout<<"请输入编号:";
    		cin>>n;
    		if(!n)
    			break;
    		if(n==1)
    		{
    			if(init(L))
    				cout<<"建立顺序表成功"<<endl;
    			else
    				cout<<"建立顺序表失败"<<endl;
    			cout<<endl;
    		}
    		if(n==2)
    		{
    			cout<<"请输入链表元素的个数:";
    			cin>>m;
    			cout<<"请输入链表元素:";
    			L.place=new List[maxn];
    			int _;
    			for(int i=0;i<m;i++)
    			{
    				cin>>_;
    				L.place[i].num=_;
    				L.place[i].id=i;
    				L.len++;
    			}
    		}
    		if(n==3)
    		{
    			
    			cout<<"请输入链表中要取值的位置:";
    			cin>>ID;
    			if(get_num(L,ID,g))
    			{
    				cout<<"查找成功!";
    				cout<<"链表中第"<<ID<<"个位置的元素为:"<<g.num<<endl;
    			}
    			else
    				cout<<"查找失败!位置超出范围!"<<endl;
    		}
    		if(n==4)
    		{
    			cout<<"请输入需要查找的元素:";
    			int x;
    			cin>>x;
    			if(find(L,x))
    				cout<<"查找成功!该元素在顺序表中"<<endl;
    			else
    				cout<<"查找失败!该元素不在顺序表中"<<endl;
    		}
    		if(n==5)
    		{
    			cout<<"请输入需要插入的位置和元素(用空格隔开):";
    			int _,__;
    			cin>>_>>__;
    			if(insert(L,_,__))
    				cout<<"插入成功"<<endl;
    			else
    				cout<<"插入失败"<<endl;
    		}
    		if(n==6)
    		{
    			cout<<"请输入要删除的位置:";
    			int _;
    			cin>>_;
    			if(Delete(L,_))
    				cout<<"删除成功"<<endl;
    			else
    				cout<<"删除失败"<<endl;
    		}
    		if(n==7)
    		{
    			cout<<"当前顺序表读出:"<<endl;
    			for(int i=0;i<L.len;i++)
    				cout<<L.place[i].num<<" ";
    			cout<<endl;
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    读书笔记-编写可读代码的艺术[中]
    读书笔记-编写可读代码的艺术[上]
    读书笔记-编写可读代码的艺术[上]
    单元测试Struts2Spring项目的Action和Service(包含源码)
    单元测试Struts2Spring项目的Action和Service(包含源码)
    单元测试Struts2的Action(包含源码)
    Java实现 LeetCode 223 矩形面积
    Java实现 LeetCode 223 矩形面积
    Java实现 LeetCode 223 矩形面积
    Java实现 LeetCode 222 完全二叉树的节点个数
  • 原文地址:https://www.cnblogs.com/Friends-A/p/10324319.html
Copyright © 2020-2023  润新知