您的位置:首页 > 编程语言 > C语言/C++

《C语言及程序设计》教学视频 <18 链表中结点的插入和删除> 示例代码

2017-05-02 17:55 267 查看

2017-05-02

//创建一个有序链表
#include <stdio.h>
#include <malloc.h>

typedef struct Link{

int data;
struct Link *next;
}Node;

//建立有序链表
Node *insertNode(Node *head, int b)
{
Node *q1=NULL, *q2=NULL, *p=NULL;
//指向头节点的指针 中间指针 指向新建节点的指针

q1=head;
p = (Node *)malloc(sizeof(Node));
p->data=b;

if(head==NULL)//如果当前链表为空,则将新建节点作为首节点
{
head = p;
p->next=NULL;
}
else if(p->data < q1->data)//若新建节点数据比首节点数据小,则将新建节点置为首节点
{
head = p;
p->next = q1;
}
else//找到位置插入新建节点
{
while(q1!=NULL && q1->data < p->data)
{
q2 = q1;
q1 = q1->next;
}

//将新建节点 p 插在q2 后面
p->next = q2->next;
q2->next = p;
}

return head;
}

//遍历链表
void traverse(Node *head)
{
Node *p=NULL;

p=head;//p 指向头节点

do{
printf("%-5d", p->data);
p=p->next;//p 指向下一个节点
}while(p!=NULL);
printf("\n");
}

//驱动测试函数
void main()
{
int i=0;
Node *head = NULL;
int a[] = {78, 69, 98, 27, 36};

for(i=0; i<5; i++)
{
head = insertNode(head, a[i]);
}

traverse(head);//遍历有序链表
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 链表
相关文章推荐