❶ c语言中的linklist是什么
typedef struct node{ //结点类型定义
DataType data; //结点的数据域
struct node *next;//结点的指针域
}ListNode;
typedef ListNode *LinkList;
❷ C语言问题,这里的linklist前面加的*有什么用啊
Linklist前面加的*,意思就是Linklist是指向 struct node 类型的结构体的指针,指向一种结构体类型。
Linklist head,p,q;
也是初始化head,p,q为指向这种类型结构体的指针,但是具体指向哪一个结构体还没有分配。
望采纳
❸ 关于 C语言链表(linklist)
好象不是循环链表吧.....
pf=pb//这句是看你是否真正懂了整个创建过程,pb是指像当前最新创建的结点,而pf则指向上一个结点 每次从开始循环 pb指向新创建的结点 之后利用pf->next=pb来挂结点 而最后 pf指向pb 准备迎接下一个结点 当下一个结点来时
pb又指向新的结点 而pf 指向刚刚创建的结点 利用 pf->next=pb把pb挂在pf后面
pb->next=null 是在把新的结点的next域指定为空 也是一个初始化
malloc 是申请一块内存空间来给新的结点 如果不去申请的话 新的结点放哪? 我们创建的东西都是凭空想象的 但是最后都要写到计算机里面 分配一块内存空间大概就是这个意思
❹ 标准C语言中有LinkList *&L这种用法吗(指针的引用) 谁能告诉我下面的程序是用什么语言写的
标准C没有引用这一用法。
上述代码是用C++语言写的,文件扩展名是.cpp或者.cxx等。
因为C++是C的扩展,所以C中已有的头文件等都可以一样使用。
❺ C语言如何组合如下几个文件linklist.h,linklist.c,linlistMain.c,为什么程序老报错
首先你要弄清楚头文件.h的作用,头文件是为调用者提供函数调用时使用的数据结构定义以及函数原型的,头文件中只应该有数据结构、宏定义、函数原型,不应该包括函数实现。所以initialize这个函数的实现应该放到对应的.c文件中,否则多个源文件引用这个头文件后将导致连接器进行连接时发现initialize函数定义重复。
linkedlist.h内容应该为如下表述
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#define SUCCESS 0 //宏定义
#define FAIL 1 //宏定义
#include <stdio.h>
#include <malloc.h>
//数据结构定义
typedef struct node
{
int elem;
struct node * p;
}node,*linklist;
//头插法建立单链表函数原型
void createFromHead(linklist l);
//尾插法建立单链表函数原型
void createFromEnd(linklist l);
#endif //注意预处理语句不能使用分号结束
linkedlist.c提供具体的函数实现,这里又涉及到#ifndef XXX_H #define XXX_H #endif预处理语句的功能,这部分语句起到哨兵监察的作用,防止头文件被重复包含造成数据结构和函数定义重复,翻译成自然语言就是如果没有定义XXX_H,就定义XXX_H这个符号。如果你已经include了XXX_H,则编译器会发现XXX_H这个符号已经被定义了,所以#ifndef XXX_H和成对的#endif之间的语句就不会再被处理了。你的链表实现文件中只引用了一个linkedlist.h所以上述警戒预处理指令没有必要存在,实现文件如下
#include "linkedlist.h"
//链表初始化
int initialize(linklist *l)
{
*l = (linklist)malloc(sizeof(node));
(*l)->p =NULL;
return 0;
}
void createFromHead(linklist l)
{
node *s;
char c;
int flag=1;
while (flag)
{
c=getchar();
if ('$'!=c)
{
s =(node*)malloc(sizeof(node));
s->elem=c;
s->p = l->p;
l->p = s;
}else
flag = 0;
}
}
// createFromEnd这个函数将来实现也要放在这个.c文件中
你的main函数不用修改
在linux环境下编译程序时使用gcc -Wall -o testlinkedlist linkedlist.c linkedlistMain.c
生成的可执行程序名字叫testlinkedlist
❻ C语言 void Create_LinkList(LinkList &L) { }
我个人觉得两种都是可以的, 只是后面的处理的时候不一样而已
void Create_LinkList(LinkList &L) {}这种是在被调函数之前, 即使只定义而不初始化(也就是分配内存地址)LinkList变量, 进去后再进行初始化也是可以的, 到时候在外面使用那个变量的时候照样能用,但是要注意这个时候必须要在被调函数中进行内存的分配等;
void Create_LinkList(LinkList L) {}这种的话, 你肯定是在外面已经分配了最开始节点的地址了, 地址被传进去后根据这个地址更改下一个指向并挂载后面的节点
以前也遇见过这个问题, 当时迷糊了一段时间, 后来就自己保留了个小日志。 写得乱了点
不嫌弃的话, 可以进去看看
URL:
希望能够帮到你, 当然也希望没有误导你, 嘿嘿
❼ c语言中的linked list
//list 头文件
#include <stdlib.h>
#include <string.h>
#define NEW (struct node *)malloc(sizeof(struct node))
struct node
{
char name[20];
char tel[9];
struct node *next;
};
/* 创建 linked list */
struct node *create()
{
static struct node *h;
struct node *p,*q;
char name[20];
h = NULL;
printf("name : ");
gets(name);
while(0 != strlen(name))
{
p = NEW;
if(NULL == p)
{
printf("allocation failure \n");
exit(0);
}
strcpy(p->name,name);
printf("tel : ");
gets(p->tel);
p->next = NULL;
if(NULL == h)
h = p;
else
q->next = p;
q = p;
printf("name: ");
gets(name);
}
return h;
}
/* 遍历linked list */
void printlist(struct node *head)
{
struct node *p;
p = head;
while(NULL != p)
{
printf("%s\t%s\n",p->name,p->tel);
p = p->next;
}
}
/* 删除节点 */
struct node *delnode(struct node *head, char *x)
{
struct node *p,*q;
static struct node *h;
if(NULL == head)
{
printf("this is a empty linked list");
return head;
}
p = head;
while(0 != strcmp(x,p->name) && NULL != p->next)
{
q = p;
p = p->next;
}
if(0 == strcmp(x,p->name))
{
if( p == head)
head = p->next;
else
q->next = p->next;
free(p);
}
else
printf("can't find your node");
h = head;
return h;
}
//测试
❽ C语言 linked list
next=next->link;这句应该是头结点向后移动吧,这里link是指向像个节点?
previous>next,这个对比是什么意思?不应该对比节点中的数据大小么?
❾ C语言linklist &l 和linklist l的区别
LinkList&L
是引用传递
可以起到修改链表的效果
LinkList
L
是值传递
传的是L的一个副本
对副本操作后无法起到修改链表的效果
❿ c语言中的linkedlist问题
你还是把整个文件贴出来,或者发到邮箱里吧
[email protected]
一来可以直接看到代码的问题,二来调试也方便一些。
我猜测是循环处理有问题,导致反复出现同一数字,只是猜测,具体还是希望能看到完整代码,或者能跑起来的部分代码。