【数据结构C++代码】1 顺序表(数组)

2023-11-05

#include<iostream>
#include<stdlib.h>
using namespace std;

#define maxsize 30 
#define LIST_INIT_SIZE 80 // 线性表存储空间的初始分配量
#define LISTINCREMENT 10// 线性表存储空间的分配增量

typedef struct
{
	int age;
	char sex;
}Elemtype;
//1.静态数组 
typedef struct
{
	Elemtype data[maxsize];
	int length;//当前长度 
	int listsize;//容量 规模 
}SqList001;//SqList001现在是一个顺序表数据类型;
//2.动态数组
typedef struct
{
	Elemtype *elem;//基地址
	int length;//当前长度 
	int listsize;  // 当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;//顺序表

//初始化

int initSq(SqList &L)
{
	L.elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));//初分配
	if(!L.elem )
		return 0;
	L.listsize=LIST_INIT_SIZE; 
	L.length=0;
	return 1;
}//initSq

//摧毁线性表

int destorySq(SqList &L) 
{
	free(L.elem);
	return 0;
}

//判断顺序表是否为空

int listEmpty(SqList L)
{
	if(L.length==0)
		return 1;
	else
		return 0;
}

//求表长

int lengthSq(SqList L) 
{
	return L.length;
}

//求前驱的值 PriorElem

int priorElem(SqList L,int pos,Elemtype &pre)
{
	if(pos<=0 || L.length==0 ||pos>L.length )
		return 0;
	else
		pre=L.elem[pos-1];
	return 1;
} 

//插入 输入的是序号 实际是下标+1

int insertSq(SqList &L,int pos,Elemtype e)//在L的第i个元素之前插入
{//新元素应该在L.elem[i-1]这个下标 

	if(pos<1 || pos>L.length+1 )//位置不合法
		return 0;
	if(L.length>=L.listsize )//当前存储空间已满,增加分配
	{
		L.elem=(Elemtype*)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(Elemtype));
		if(!L.elem )return 0;
		L.listsize=L.listsize+LISTINCREMENT;
	}
	//插入 倒序
	//1.数组实现 
	for(int j=L.length-1 ; j>=pos-1;j-- )
	{
		L.elem[j+1]=L.elem[j];//插入位置及之后的元素后移
	}
	L.elem[pos-1]=e;
	L.length++;
	
	//2.指针实现 
	
//	Elemtype* q=&(L.elem[pos-1]);//应该在这个位置 
//	for( Elemtype* p=&(L.elem[L.length-1]; p>=q; p--))//从最后一个元素 
//	{
//		*(p+1)=*p;//后移 
//	} 
//	*q=e;
//	L.length++;
	
	 
	return 1; 
}

//删除元素

int deleteSq(SqList &L,int pos,Elemtype &e)//删除第POS个元素,下标为pos-1 
{
	if(pos<1 ||pos>L.length )
		return 0;
		
	//1.数组实现 
	e=L.elem[pos-1];//下标
	for(int i=pos-1;i<=L.length-2;i++) 
	{
		L.elem[i]=L.elem[i+1];
	}
	L.length--;
	
	//2.指针实现
//	Elemtype *p=&(L.elem[pos-1]);
//	e=*p;
//	Elemtype *last = &(L.elem[L.length-1]);
//	for(p;p<last;p++ )
//	{
//		*p=*(p+1);//后一位赋值给当前位
//	} 
//	L.length--;
	
	return 1;
} 

void traverseSq(SqList L)
{
	cout<<"\n---traverseSq----\n";
	for(int i=0;i<L.length;i++)
	{
		cout<<"age:"<<L.elem[i].age<<" sex:"<<L.elem[i].sex <<endl;
	}
}

//主函数

int main()
{
	SqList L;
	initSq(L);
	Elemtype e;
	
	for(int i=0;i<10;i++)
	{
		e.age=i+1;
		e.sex='m';
		insertSq(L,i+1,e);
	}
	traverseSq(L);
	deleteSq(L,3,e);
	cout<<"\ndelete:"<<"age:"<<e.age<<" sex:"<<e.sex <<endl;
	traverseSq(L);
	return 0;
}

/*

—traverseSq----
age:1 sex:m
age:2 sex:m
age:3 sex:m
age:4 sex:m
age:5 sex:m
age:6 sex:m
age:7 sex:m
age:8 sex:m
age:9 sex:m
age:10 sex:m

delete:age:3 sex:m

—traverseSq----
age:1 sex:m
age:2 sex:m
age:4 sex:m
age:5 sex:m
age:6 sex:m
age:7 sex:m
age:8 sex:m
age:9 sex:m
age:10 sex:m

*/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构C++代码】1 顺序表(数组) 的相关文章

  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐