线性表代码总结

1. 线性表的结构体定义
1.1 顺序表的结构体定义

#define maxSize 100 //整型常量

typedef struct{
   
	int data[maxSize];   //存放顺序表元素的数组
	int length;          //存放顺序表的长度
}SqList;                 //顺序表类型定义

但考试使用最多的顺序表的定义如下:

int A[maxSize];
int n;

如上两行定义了一个长度为n,表内元素为整数的顺序表。

1.2 单链表结点定义
typedef struct LNode{
   
	int data;              //data中存放结点数据域
	struct LNode *next;    //指向后继结点的指针
}LNode;                   //定义单链表结点类型
1.3 双链表结点定义
typedef struct DLNode{
   
	int data;
	struct DLNode *prior;  //指向前驱结点的指针
	struct DLNode *next;   //指向后继结点的指针
}DLNode;

什么是结点?
结点即内存中由用户分配的一块空间,只有一个地址来表示结点的存在与否,所以在为链表分配空间的时候,会同时定义一个指针,存储这片空间的地址(即指针指向结点),并将此指针名称作为结点的名称。

LNode *addr=(LNode*malloc(sizeof(LNode));

即分配了一片LNode型空间,也就是一个LNode型结点。并定义一个名为addr的指针指向这个结点。同时,addr也作为该结点的名字。addr命名包含两个东西:第一,结点;第二,是指向这个结点的指针。

2. 顺序表的操作
2.1 按元素值的查找算法
/**
查找第一个值等于e的元素,并返回其下标
*/
int findElem(SqList L,int e){
   
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i;   //找到,返回下标
	return -1;          //未找到,返回-1,作为失败标志
}
2.2 插入数据元素
/**
顺序表的第p个位置插入新的元素e
*/
int insertElem(SqList &L,int p,int e){
     //L本身要改变,采用引用
	if(p<0||p>L.length||L.length==maxSize)  //插入位置不合法
		return 0;
	for(int i=L.length-1;i>=p;i--)
		L.data[i+1]=L.data[i];     //从p开始元素后移
	L.data[p]=e;            //将元素e插入到位置p上
	++(L.length);
	return 1;               //插入成功,返回1
}
2.3 删除数据元素
/**
删除表中下标为p的元素,成功返回1,否则返回0,并将删除的元素赋值给e
*/
int deleteElem(SqList &L,int p,int &e){
   
	if(p<0||p>L.length)
		return 0;
	e=L.data[p];          //将被删除的元素赋值给e
	for(int i=p;i<L.length-1;i++)   //从p位置开始,将后边元素前移
		L.data[i]=L.data[i+1];
		--(L.length);     //表长减1
		return 1;
}
3. 单链表的操作
3.1 尾插法建立单链表
/**
n个元素存储在数组a中,尾插法建立链表C
*/
void createListT(LNode *&C,int a[],int n){
   
	LNode *s,*r;     //s指向新申请的结点,r始终指向C的终端结点
	C=(LNode*)malloc(sizeof(LNode));      //申请头结点空间
	C->next=NULL;
	r=C;             //r指向头结点,此时头结点即是终端结点
	for(int i=0;i<n;i++){
   
		s=(LNode
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实验一:线性表的存储结构定义及基本操作(必做:基本2 学时,扩展4 学时)........................................ 6 一、实验目的: .............................................................................................................................................. 6 二、实验内容: .............................................................................................................................................. 6 (一)基本实验内容(顺序表): ......................................................................................................... 6 (二)基本实验内容(链表): .............................................................................................................. 7 (三)扩展实验内容(顺序表) ........................................................................................................... 8 (四)扩展实验内容(链表) ............................................................................................................... 9 三、实验指导.................................................................................................................................................. 9 四、基本实验的参考程序............................................................................................................................. 11 五、实验环境和实验步骤............................................................................................................................. 24 六、思考题.............

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一倾而尽

你的鼓励将是我最大的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值