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

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

实验目的

一、实验目的与基本要求
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;
}
原文地址:https://www.cnblogs.com/Friends-A/p/10324319.html