数据结构问题 (Sqlist &l)与(Sqlist l)的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构问题 (Sqlist &l)与(Sqlist l)的区别相关的知识,希望对你有一定的参考价值。

参考技术A (Sqlist &l)与(Sqlist l)的区别
这里的区别是形参不同啊,如果你 &看成指针,就能明白了.对Sqlist &l如果函数中对顺序表内的数据有修改这时的数据的变化是能带回来的,如果用(Sqlist l,就不能带回来

静态链表

#include "stdafx.h"
#include <malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{
	ElemType data[MaxSize];
	int length;
} SqList;
// 一维数组即是顺序表
void InitList(SqList * &L)
{
	L = (SqList *)malloc(sizeof(SqList));
	L->length = 0;
}

void DestroyList(SqList *L)
// 释放顺序列表
{
	free(L);
}

int ListEmpty(SqList *L)
{
	return (L->length == 0);
}

int ListLength(SqList *L)
{
	return L->length;
}

void DispList(SqList *L)
{
	int i;
	if (ListEmpty(L))return;
	for (i = 0; i < L->length; i++)
	{
		printf_s("%c", L->data[i]);
	}
	printf_s("\n");
}
int GetElem(SqList *L, int i, ElemType &e)
// 获取顺序表第i个元素
{
	if (i<1 || i>L->length)
	{
		return 0;
	}
	e = L->data[i - 1];
	return 1;
}
int LocateElem(SqList *L, ElemType e)
// 在顺序表中查找元素e
{
	int i = 0;
	while (i<L->length && L->data[i]!=e)
	{
		i++;
	}
	// 
	if (i >= L->length)
	{
		return 0;
	}
	return i+1;
}
int ListInsert(SqList *&L, int i, ElemType e)
// 在顺序列表L中第i个位置上插入元素e
{
	int j;
	if (i<1 || i>L->length + 1)
	{
		return 0;
	}
	i--;
	for (j = L->length; j < i; j--)
	{
		L->data[j] = L->data[j - 1];
	}
	L->data[i] = e;
	L->length++;
	return 1;
}
int ListDelete(SqList *&L, int i, ElemType &e)
// 在顺序列表中删除第i个元素
{
	int j;
	if (i < 1 || i>L->length)
	{
		return 0;
	}
	i--;
	e = L->data[i];
	for (j = i; j < L->length - 1; j++)
	{
		L->data[j] = L->data[j + 1];
	}
	L->length--;
	return 1;
}

  

以上是关于数据结构问题 (Sqlist &l)与(Sqlist l)的区别的主要内容,如果未能解决你的问题,请参考以下文章

SqList *L 和 SqList * &L的区别/学习数据结构突然发现不太懂 小祥我查找总结了一下

顺序表SqList *&L是什么意思

顺序表SqList *&L是什么意思

Flex:如何将 S:list 中的 Sqlist 查询绑定到 S:Textarea

静态链表

顺序表的运算