吴老师和他教的课
Would you like to react to this message? Create an account in a few clicks or log in to continue.

数据结构基本代码2:线性链表的创建与节点的删除

2 posters

向下

数据结构基本代码2:线性链表的创建与节点的删除 Empty 数据结构基本代码2:线性链表的创建与节点的删除

帖子  Admin 周五 四月 01, 2011 12:09 am

/* 创建一个链表,创建后删除链表中的某一个节点 */
#include "stdio.h"
#include "stdlib.h"

/*定义node结构体类型*/
typedef struct node
{
int data;
struct node *next;
}node;

void main()
{
node *p,*q; //定义两个node类型的指针,起辅助作用
node *head=(node *)malloc(sizeof(node)); //生成链表的头节点
int n; //变量n用于存放链表节点数;
int i,j,temp;

/*创建长度为n的链表*/
printf("请输入链表中节点的个数:"); //由用户输入链表的节点总数
scanf("%d",&n);

p=head; //指针p指向链表头节点
for(i=1;i<=n;i++) //用for循环创建n个节点
{
q=(node *)malloc(sizeof(node)); //生成新节点,其地址保存在指针q中

printf("请输入第%d个节点的值:",i); //由用户输入节点的data域值
scanf("%d",&temp);
/**/
q->data=temp; //将用户输入的值赋给节点的data域
p->next=q; //前一个节点的next域指向新节点
p=q; //辅助指针p移动到新生成的节点上
}
p->next=NULL; //将最后一个节点的next域设为空

/*输出创建好的链表*/
p=head->next; //p指向链表的第一个节点(不是头节点)
if(!p)
printf("此链表为空!");
else
{
i=1; //i用于辅助计数,当p指向地x个节点时,i的值为x;
while(p) //输出整个链表的所有节点值(不包含头节点)
{
printf("第%d个节点的值是:%d\n",i,p->data); //输出当前节点的data域值
p=p->next; //p指针移动到下一个节点
i++; //辅助变量i自增1
}
}

/*删除链表中的第j个节点*/
printf("请输入要删除的节点位置:"); //有用户给出要删除的节点位置
scanf("%d",&j);

p=head; //p指向第头节点
i=0; //辅助变量i为0

while(p&&i<j) //找到所要删除的第j个节点
{
if(i==j-1) //找到第j-1个节点时,用指针变量q保存下该节点地址。
q=p; //因为删除第j个节点,我们重点要对第j-1个节点进行一系列操作
p=p->next;
i++;
}

if(!p||i!=j) //判断是否找到了第j个节点。
{
printf("错误,您哟删除的节点位置超过节点总个数!\n");
return;
}
/*如果找到了第j个节点*/
q->next=p->next; //将第j-1个节点的next域指向第j个节点的下一个节点
free(p); //释放第j个节点

/*重新打印删除第j个节点后的链表*/
p=head->next;
if(!p)
printf("此链表为空!");
else
{ i=1;
while(p)
{
printf("第%d个节点的值是:%d\n",i,p->data);
p=p->next;
i++;
}
}
}
附件
数据结构基本代码2:线性链表的创建与节点的删除 Attachment
linklist.zip 您无权下载这里的附件。(2 Kb) 下载0次
Admin
Admin
Admin

帖子数 : 25
注册日期 : 10-12-07

http://wubinyu.gugebb.net

返回页首 向下

数据结构基本代码2:线性链表的创建与节点的删除 Empty 回复: 数据结构基本代码2:线性链表的创建与节点的删除

帖子  lphqzsf 周日 四月 03, 2011 6:15 pm

使用动态链表的时候,库函数要不要写 #include <malloc.h> ? bom

lphqzsf

帖子数 : 3
注册日期 : 11-03-30

返回页首 向下

返回页首


 
您在这个论坛的权限:
不能在这个论坛回复主题