c语言链表增加函数,c语言创建链表函数

C语言单链表的插入(已给出函数和结构体)

NODE * insert_note(NODE * head,NODE * p,int i)

在玉屏等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都网站制作 网站设计制作按需求定制制作,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,成都外贸网站建设,玉屏网站建设费用合理。

{

NODE *pb=head,*pf=NULL ;

int n=0;

if(head==NULL)//如果为空就建立,空间在传入前申请好

{

head=p;

p-next=NULL;

}

else

{

for (;i0;i--)

pb=pb-next;

pf=pb-next;

pb-next=p;

p-next=pf; //在表后插入

}

return head;

}

c语言链表插入一个新节点的函数问题

首先,主函数中,“请输入插入的数据”那里scanf应该是b,这是引发崩溃的原因。

其次,insert函数的目的应该是想插入数据后仍是有序链表。但你的insert函数逻辑太乱,有些不必要的判断,我修正了你的代码,贴给你看看。(虽然你insert是想保证有序,但你在创建的时候没有保证有序,所以最终结果不一定是有序。例如,创建 1,5,2,插入3,最后输出的是 1,3,5,2)

代码修改:

scanf("%d", b);

重写了insert函数,简化逻辑;

动态分配的内存记得释放,增加freeNode释放空间

#include stdio.h

#include stdlib.h

struct link

{

int data;

struct link *next;

};

struct link *add(struct link *head);//创建链表 

void display(struct link *head);//输出数据 

struct link *insert(struct link *head, int b); //插入新节点 

void freeNode(struct link *); //释放空间

int main()

{

char c;

struct link *head = NULL;

printf("要创建一个链表吗?");

scanf(" %c", c);

while (c == 'y' || c == 'Y')

{

head = add(head);

printf("要继续创建节点吗?");

scanf(" %c", c);

}

display(head);

int b;

printf("输入插入的数据");

scanf("%d", b);

head = insert(head, b);

display(head);

freeNode(head);

}

struct link *add(struct link *head)

{

int data;

struct link *p = (struct link*)malloc(sizeof(struct link));

if (head == NULL)

{

head = p;

}

else

{

struct link *pr = head;//一个临时指针pr先保存下head的地址 

while (pr-next != NULL)

{

pr = pr-next;

}

pr-next = p;

}

printf("输入数据");

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

p-next = NULL;

return head;

}

void display(struct link *head)

{

struct link *pr = head;

while (pr != NULL)

{

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

pr = pr-next;

}

}

struct link *insert(struct link *head, int b)

{

struct link *ptr = head, *prev = head;

struct link *newNode = (struct link *)malloc(sizeof(struct link));

newNode-data = b;

while (ptr  b  ptr-data) {

prev = ptr;

ptr = ptr-next;

}

newNode-next = ptr;

if (ptr == head) head = newNode;

else prev-next = newNode;

return head;

}

void freeNode(struct link *node) {

if (!node) return;

freeNode(node-next);

free(node);

}

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语言链表增加函数,c语言创建链表函数
当前链接:http://myzitong.com/article/dsscssc.html