重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

c语言链表函数 c语言链表函数后面的括号

C语言链表函数,求解析。

答案:

创新互联建站主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务怒江州,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

①p0

②p1

③NULL

解析:

p0指向要插入的结点,p1指向要和p0结点的info进行比较的结点,如果找到应该插入的位置,p0会被插入在p1之前,如果没找到,会被插入在p1之后。

第一个if检查链表是否为空,如果为空,直接将p0变为首结点就完成了插入。

while循环的作用是寻找插入位置,因为链表要求降序,所以用p1从首结点开始找,要找到第一个info小于等于p0结点的结点。每次循环结束后,p2将指向p1之前的结点,为后面的插入作准备。

第二个if检查之前的while循环是否找到这样的结点。如果没找到,说明前面从while循环出来时p1指向的是尾结点,这时要将p0插入到链表末尾,所以将p0插入到p1之后。p0的后面没有结点,所以它的link指向NULL,所以第③问填NULL。如果找到了,那么进入第三个if。

第三个if检查p1是否刚好为首结点,如果为首结点,说明前的while循环根本没进去直接就出来了,这时p1之前没有结点,p2还没有指向任何结点,所以还不能使用p2。由于要将p0插入到p1之前,所以必须将p0变为首结点,所以第①问填p0。

如果p1不是首结点,进行的就是常规的插入操作了,将p0插入到p1之前,p2之后,所以第②问填p1。注意这里不能填p2-link,因为这里不在第三个if的else里面,第三个if出来以后也要经过这一步,而之前说了,如果进入了第三个if,p2是不能使用的。

C语言创建了一个链表函数,如何保存这个链表的头结点?

head=(node*)malloc(sizeof(node));/ /创建头结点

head-next=NULL;

while(n--)

{

printf("\n请输入单链表第%d个结点的值:",i++);

scanf("%d",a);

p=(node*)malloc(sizeof(node));

p-info=a;

p-next=head-next;

head-next=p;

}

追问

能不能详细一点呢

追答

#include "stdio.h"

typedef int datatype;

typedef struct link_node

{

datatype info;

struct link_node *next;

}node;

main()

{

int i=1,n,a;

node *head,*p,*q;

printf("\n本程序建立带头结点的单链表:\n");

printf("请输入你所需要建立带头结点的单链表的结点数:");

scanf("%d",a);

head=(node*)malloc(sizeof(node));

head-next=NULL;

while(a)

{

printf("\n请输入单链表第%d个结点的值:",i++);

scanf("%d",n);

if(n==0)

break;

p=(node*)malloc(sizeof(node));

p-info=n;

p-next=head-next;

head-next=p;

a--;

}

if(!head-next) printf("\n单链表是空的!\n");

else

{

printf("\n单链表各个结点的值分别为:\n");

q=head-next;

while(q)

{

printf("%5d",q-info);/*输出非空表中第一个结点的值*/

q=q-next;/*p指向第一个结点的下一个结点*/

}

}

printf("\n");

}

c语言用函数创建单链表

#includestdio.h

#includestdlib.h

//链表定义

typedef int ElemType;

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*LinkList;

/*************************************

* 链表函数 *

*************************************/

//链表初始化

void InitLink(LinkList L);

//创建函数,尾插法

void CreateLink_T(LinkList L,int n);

//创建函数,头插法

void CreateLink_H(LinkList L,int n);

//销毁函数

void DestroyLink(LinkList L);

//判断是否为空函数

bool EmptyLink(LinkList L);

//获取函数

bool GetLink(LinkList L,int i,int e);

//插入函数

void InsertLink(LinkList L,int i,int e);

//删除函数

void DeleteLink(LinkList L,int i,int e);

//遍历函数

void TraverseLink(LinkList L);

//链表长度函数

int LengthLink(LinkList L);

//合并函数

void MergeLink(LinkList L1,LinkList L2);

void main()

{

LinkList L1,L2;

InitLink(L1);

InitLink(L2);

CreateLink_H(L1,2);

CreateLink_T(L2,2);

TraverseLink(L1);

printf("\n");

TraverseLink(L2);

printf("\n");

MergeLink(L1,L2);

TraverseLink(L1);

TraverseLink(L2);

}

//创建函数,尾插法

void InitLink(LinkList L)

{

L=(LinkList)malloc(sizeof(LNode));

if (!L)

{

printf("Init error\n");

return;

}

L-next=NULL;

}

void CreateLink_T(LinkList L,int n)

{

if(n1)

{

printf("n must =1\n");

return ;

}

else

{

// L=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

for(int i=0;in;i++)

{

LinkList p=(LinkList)malloc(sizeof(LNode));// the lower letter p

printf("enter the data :\t");

scanf("%d",(p-data));

p-next=L-next;

L-next=p;

}

}

}

//创建函数,头插法

void CreateLink_H(LinkList L,int n)

{

if (n1)

{

printf("n must =1\n ");

return;

}

else

{

//L=(LinkList)malloc(sizeof(LNode));

LinkList pre=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

pre=L;

for(int i=0;in;i++)

{

LinkList p=(LinkList)malloc(sizeof(LNode));

printf("enter the data:\t");

scanf("%d",(p-data));

pre-next=p;

pre=p;

}

pre-next=NULL;

}

}

//销毁函数

void DestroyLink(LinkList L)

{

LinkList q=L,p=L;

while (p)

{

q=p;

p=p-next;

free(q);

}

L-next=NULL;

}

//判断是否为空函数

bool EmptyLink(LinkList L)

{

if (NULL==L-next)

{

return true;

}

else

{

return false;

}

}

//获取函数

bool GetLink(LinkList L,int i,int e)

{

if (i1)

{

return false;

}

else

{

if (EmptyLink(L))

{

return false;

}

LinkList p=L-next;

int j=1;

while(pji)

{

p=p-next;

j++;

}

if (!p||ji)

{

return false;

}

else

{

e=p-data;

return true;

}

}

}

//插入函数

void InsertLink(LinkList L,int i,int e)

{

if (i0||iLengthLink(L))

{

printf("Insert error\n");

return;

}

else

{

LinkList p=L;

int j=0;

while(p(ji))

{

p=p-next;

j++;

}

if (!p||ji)

{

printf("Insert error\n");

return;

}

else

{

LinkList q=(LinkList)malloc(sizeof(LNode));

q-data=e;

q-next=p-next;

p-next=q;

}

}

}

//删除函数

void DeleteLink(LinkList L,int i,int e)

{

if(i=0||iLengthLink(L))

{

printf("delete error\n");

return;

}

else

{

LinkList p=L;

int j=0;

while(pji-1)

{

p=p-next;

j++;

}

if(!p||ji)

{

printf("please enter i again\n");

return;

}

else

{

LinkList q=p-next;

e=p-next-data;

p-next=p-next-next;

free(q);

}

}

}

//遍历函数

void TraverseLink(LinkList L)

{

LinkList p=L-next;

if(!p)

{

printf("the Link L is empty\n");

}

while(p)

{

printf("%d\n",p-data);

p=p-next;

}

}

//链表长度函数

int LengthLink(LinkList L)

{

int i=0;

LinkList p=L-next;

while(p)

{

p=p-next;

i++;

}

return i;

}

//合并函数

void MergeLink(LinkList L1,LinkList L2)

{

int i=0,flag=0;

LinkList p1=L1-next,p2=L2-next;

LinkList p=(LinkList)malloc ((LengthLink(L1)+LengthLink(L2)+2)*sizeof(LNode));

LinkList pre=p;

if (!p)

{

printf("MergeLink error\n");

return;

}

p-next=NULL;

while (p1p2)

{

if (p1-data=p2-data)

{

InsertLink(p,i++,p2-data);

p2=p2-next;

}

else

{

InsertLink(p,i++,p1-data);

p1=p1-next;

}

}

while (p1)

{

InsertLink(p,i++,p1-data);

p1=p1-next;

}

while(p2)

{

InsertLink(p,i++,p2-data);

p2=p2-next;

}

while(pre)

{

pre=pre-next;

}

LinkList q=L1;

L1=p;

DestroyLink(q);

DestroyLink(L2);

}

C语言链表嵌入的函数

//insert "OL" into Order_Linear_List @ "i"

Status ListInsert_OL(Order_Linear_List L , int i , Order_Linear_List OL){

cout"this function begain to run ...\n";

//check the "i" illegal or not

if(i1 || iL.length) return ERROR ;

//realloc the RAM when the previous storage space is full ...

if(L.length = L.listSize){

Order_Linear_List * newBaseAdd ;

newBaseAdd = (Order_Linear_List *)realloc(L.listBase,(L.listSize+LIST_INCREAMENT)*sizeof(Order_Linear_List));

if(!newBaseAdd)return(OVERFLOW);

L.listBase = newBaseAdd ;

L.listSize += LIST_INCREAMENT ;

}

//get the index of where to insert the element

Order_Linear_List *q ;

q = L.listBase[i-1];

//move the element behand of the insert-index

Order_Linear_List *p ;

for (p = L.listBase[L.length-1] ; p = q ; --p) *(p+1) = *p ;

*q = OL ;

L.length += 1;

return OK ;

}

关于c语言链表函数

#includestdio.h#includewindows.h#include stdio.h#include malloc.h#include stdlib.h//定义数据类型名称typedef int DataType;#define flag -1 //定义数据输入结束的标志数据//单链表结点存储结构定义typedef struct Node{ DataType data; struct Node *next;}LNode ,*LinkList;//建立单链表子函数 LNode *Create_LinkList(){ LNode *s,*head,*L;int i=0,x; //定义指向当前插入元素的指针 while(1) { scanf("%d",x); if(-1==x) { return head; break;} s= (LNode *)malloc(sizeof(LNode)); //为当前插入元素的指针分配地址空间 s-data =x; s-next =NULL; i++; if(i==1) head=s; else L-next =s; L=s; }}//查找子函数(按序号查找)LNode *Get_LinkList(LinkList L,int i){ LNode *p; int j; //j是计数器,用来判断当前的结点是否是第i个结点 p=L; j=1; while(p!=NULLji) { p=p-next ; //当前结点p不是第i个且p非空,则p移向下一个结点 j++; } return p;}//插入运算子函数void Insert_LinkList(LinkList L,int i,DataType x) //在单链表L中第i个位置插入值为x的新结点{ LNode *p,*s; p =Get_LinkList(L,i); //寻找链表的第i-1个位置结点 if(p==NULL) { printf("插入位置不合法!"); exit(-1); } else { s= (LinkList)malloc(sizeof(LNode)); //为当前插入元素的指针分配地址空间 s-data =x; s-next =p-next ; p-next =s; }}//单链表的删除运算子函数void Delete_LinkList(LinkList L,int i) //删除单链表上的第i个结点{ LNode *p,*q; p=Get_LinkList(L,i-1); //寻找链表的第i-1个位置结点 if(p==NULL) { printf("删除的位置不合法!"); //第i个结点的前驱结点不存在,不能执行删除操作 exit(-1); } else { if(p-next ==NULL) { printf("删除的位置不合法!"); //第i个结点不存在,不能执行删除操作 exit(-1); } else { q=p-next ; p-next =p-next-next; free(q); } }}//求表长运算子函数int Length_LinkList(LinkList L){ int l; //l记录L的表长 LNode *p; p=L; l=1; while(p-next) { p=p-next; l++; } return l;}int main (){ LNode *head,*p; head=(LinkList)malloc(sizeof(LNode)); int x,y; a: printf("*******menu*******\n"); printf("**创建**********1*\n"); printf("**插入**********2*\n"); printf("**删除**********3*\n"); printf("**表长**********4*\n"); printf("**清屏**********5*\n"); printf("**打印**********6*\n"); printf("**退出******other*\n"); printf("******************\n"); int i=1; while(i) { printf("请输入选项:"); scanf("%d",i); switch(i) { case 1:head=Create_LinkList(); getchar();break; case 2:printf("请输入位置和数据;"); scanf("%d%d",x,y); Insert_LinkList(head,x,y);break; case 3:printf("请输入位置;"); scanf("%d",x); Delete_LinkList(head,x);break; case 4:printf("%d",Length_LinkList(head));break; case 5:system("cls");goto a; case 6:p=head; while(p!=NULL) {printf("%d\n",p-data); p=p-next;} break; default :i=0; } }}

我把创建给改了一下

C语言链表输出函数功能? 求解答! 请问有些什么功能?

链表分类型有:单链表、双链表、单向环形链表、双向环形链表。

单链表:只有一个头节点为入口,并且每一个节点只有一个单向地址指向下一个节点,简单的说在后一个节点无法返回上一个节点。

双链表:有头节点和尾节点作为入口,每一个节点有两个地址,一个指向前一个节点,一个指向后一个节点。解决了单链表无法返回前一个节点的问题。

单向环形链表:这是一个特殊的单链表,这个链表是把它的最后一个节点地址指向首节点的入口处。如果它要查找前一个节点的时候需要,转回首节点然后才能到达前一个节点。

双向环形链表:顾名思义,构成环形结构的双向链表。


网站栏目:c语言链表函数 c语言链表函数后面的括号
URL网址:http://cqcxhl.cn/article/hpcjed.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP