数据结构中的线性表中的指针使用

问题描述

数据结构中的线性表中的指针使用

数据结构 单链表
类型定义:
typedef struct lnode
{
elemtype data;
struct lnode *next;
}Lnode, *LinkList;

int InitList(LinkList L)//构造一个空的线性表L
{ 构造一个空的线性表L
*L=(LinkList)malloc(sizeof(struct LNode));
if(!*L) /
存储分配失败 /
exit(OVERFLOW);
(*L)->next=NULL; /
指针域为空 */
return OK;
}

int ListInsert(LinkList L,int i,ElemType e) //在带头结点的单链线性表L中第i个位置之前插入元素e
{
int j=0;
LinkList p=L,s;
while(p&&j
{
p=p->next;
j++;
}
if(!p||j>i-1) /* i小于1或者大于表长 /
return ERROR;
s=(LinkList)malloc(sizeof(struct LNode)); /
生成新结点 /
s->data=e; /
插入L中 */
s->next=p->next;
p->next=s;
return OK;
}

void main()
{
LinkList L;
ElemType e;
int i;
int j;
i=InitList(&L);
for(j=1;j<=10;j++)
ListInsert(L,j,j);
}
在类型定义中linklist已经是指向节点的指针了,为什么在构造一个空的线性表L的函数int InitList(LinkList *L) 中形参为LinkList *L(即L为指向指针的指针),而不是LinkList L????linklist作为一个指针也可以操作链表的呀!!!
在链表插入函数int ListInsert(LinkList L,int i,ElemType e)中,形参为什么却变成了LinkList L???
在main函数中定义的是指针变量LinkList L; 为何不定义成Lnode L????
什么时候该用LinkList *L,什么时候该用LinkList L,什么时候该用Lnode L?????它们的区别是什么????望大神详细回答,感激万分!!!

解决方案

如果你不修改指针,只是修改指针指向的对象/结构体,那么就不需要指针的指针,指针就可以了。

解决方案二:

因为你希望将L指向另一个指针,而调用者可以得到这个新的指针,所以要用指针的指针。
如果不用指针,那么将L指向别的指针,实参不会受影响,也就起不到初始化的作用。

解决方案三:

值传递没法改变实际指针指向,所以这里传入二级指针,initlist(&l)这里。就跟交换两个数的函数一个意思?

时间: 2024-10-30 11:47:15

数据结构中的线性表中的指针使用的相关文章

编程c语言-数据结构中构建线性表

问题描述 数据结构中构建线性表 为什么是取地址符,求普及 解决方案 因为你需要在函数内创建和返回这个表.而status这个返回值被用来返回状态. 用引用修饰参数,将参数当作返回值,这是一种常见的技巧. 解决方案二: 返回地址的引用,方便对返回的表作其他操作. 解决方案三: 有些编译器 没有bool 类型, 就用宏定义了 status 类型 表示 bool类型,不是取地址把? 应该是c++中的引用把? 如果取地址,下面的应该L->elem, 你看的是严蔚敏的数据结构? 解决方案四: 简单来说就是你

java-用Java语言表示数据结构中的线性表

问题描述 用Java语言表示数据结构中的线性表 以线性表表示集合,判断指定元素是否属于集合,实现并.交.差等集合运算(要求:用Java语言实现)

vb6-vb 把数据输入到excel表中

问题描述 vb 把数据输入到excel表中 For m = 68 To 80 Step 3 For n = 12.6 To 16.2 Step 1.2 For o = 3.6 To 4.4 Step 0.2 For p = 210 To 275 Step 30 If m <> n And m <> o And m <> p And n <> o And n <> p Then Print m; n; o; p End If Next Next N

c#实现批量插入数据到sql数据库表中,怎么做到跳过插入失败的数据,继续插入

问题描述 c#实现批量插入数据到sql数据库表中,怎么做到跳过插入失败的数据,继续插入 c#实现批量插入数据到sql数据库表中,怎么做到跳过插入失败的数据,继续插入. 并且报错,哪几天数据失败了.和失败的原因. 我现在是可以生成一个把一个数据库表的数据导入到另一个数据库表中.但是呢,有些数据由于某个字段过长无法导入成功,而导致所有的都无法导入.直接造成导入失败.我 想过滤掉那条不成功的继续导入.不至于都导入不成功.急! 想和好久也没解决.网上也没找到说法 解决方案 数据库表插入数据失败数据库批量

判断字段是否被更新 新旧数据写入Audit Log表中_MsSql

Insus.NET解决这个问题,只有创建另外一个表,将存储用户决定要跟踪的表,以及这个表中需要跟踪的字段. 还要创建另外一个表[Audit],就是存储跟踪记录的表: 复制代码 代码如下: Audit SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Audit]( [Audit_nbr] [int] IDENTITY(1,1) NOT NULL, [AuditTy

请各位一下.如何将C#中的数据网格表中的数据导到EXCEL表中?

问题描述 请各位一下.如何将C#中的数据网格表中的数据导到EXCEL表中? 解决方案 解决方案二:是GridView导出EXCEL吗?解决方案三:从网上找到的,引用Excel库usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem

select-winfrom中如何把SqlServer数据库表查询出来的数据插入access数据库表中

问题描述 winfrom中如何把SqlServer数据库表查询出来的数据插入access数据库表中 sqlserver里面的数据是根据条件查询出来的,现在是把查询出来的数据,给他导入到access数据库中,但是不知道在C#后台中怎么写 跨数据库去执行insert select,求解啊啊啊啊啊啊 解决方案 大概的代码 DataTable table = new DataTable() SqlConnection sqlconn = new SqlConnection(connectionStr);

access-如何在c#中从数据库中提取数据并将数据存在另一表中

问题描述 如何在c#中从数据库中提取数据并将数据存在另一表中 for (int i = 0; i < checkedListBox1.Items.Count; i++) { if (checkedListBox1.GetItemChecked(i)) { OleDbConnection cnn = new OleDbConnection(Form1.con); cnn.Open(); string aa; aa = Form1.su; string bb = "select c_no fr

判断字段是否被更新 新旧数据写入Audit Log表中

Insus.NET解决这个问题,只有创建另外一个表,将存储用户决定要跟踪的表,以及这个表中需要跟踪的字段. 还要创建另外一个表[Audit],就是存储跟踪记录的表: 复制代码 代码如下: Audit SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Audit]( [Audit_nbr] [int] IDENTITY(1,1) NOT NULL, [AuditTy