作者在 2011-11-20 12:40:51 发布以下内容
#include<stdio.h>
#include<malloc.h>
#define List_init_size 2
#define Listincrement 10
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void LNode_CreateList(LinkList head,int n)//创建链表--顺序法创建链表
{
LinkList p1=head;
int a;
for(int i=1;i<=n;i++)
{
LinkList L1=(LNode*)malloc(sizeof(LNode));
printf("请输入第%d个结点的值域:",i);
scanf("%d",&a);
L1->data=a;
p1->next=L1;
}
free(p1);
}
void LNode_TraveList(LinkList head)//遍历
{
int i=0;
LinkList p;
p=head->next;
printf("空间内的所有数据元素如下:\n");
while(p!=NULL)
{
i++;
printf("链表中第%d个结点的值域是:%d\n",i,p->data);
p=p->next;
}
}
void LNode_Insertlist(LinkList head,int n1,int e)//插入,n1为插入的位置,e 为插入的值
{
LNode L;
LinkList p=head;
L.data=e ;
int i=1;
if(n1<i)
printf("所插入的位置错误。");
else
{
while(i<n1&&p->next!=NULL)//此处应该注意
{
i++;
p=p->next;
}
if(i!=n1)
printf("所插入的位置错误。");
else
{
L.next=p->next;
p->next=&L;
}
}
printf("链表中所有结点的值域如下:");
LNode_TraveList(head);
}
int LNode_Delete(LinkList head,int n2)//删除链表中的一个结点,n2为删除结点的位置
{
LinkList p=head;
int i=1;
int e;
if(n2<i)
printf("所删除的位置错误。\n");
else
{
while(i<n2&&(p->next!=NULL))
{
i++;
p=p->next;
}
if(i!=n2)
printf("所删除的位置错误。\n");
else
{
e=p->data;
p->next=p->next->next;
}
}
// printf("链表中所有结点的值域如下:");
// LNode_TraveList(head);
return e;
}
void MergeList_L(LinkList La,LinkList Lb,LinkList Lc)//合并两个有序链表
{
LinkList pa=La->next;
LinkList pb=Lb->next;
LinkList pc=Lc=La;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
}
void main()
{
int n; //确定结点的个数
int n1;//插入结点的位置
int n2;//删除结点的位置
int e; //所要插入的结点的值域
LinkList head=(LNode*)malloc(List_init_size *sizeof(LNode));
head->next=NULL;
printf("请输入所要创建的链表的结点的个数:\n");
scanf("%d",&n);
LNode_CreateList(head, n);
LNode_TraveList(head);
printf("请输入所要插入结点的位置:");
scanf("%d",&n1);
printf("请输入所要插入结点的值域:");
scanf("%d",&e);
LNode_Insertlist(head,n1,e);
printf("请输入所要删除结点的位置:");
scanf("%d",&n2);
printf("删除的结点的值域为:%d\n",LNode_Delete(head,n2));
}
运行的结果和与预想的不一样。。。求帮助。。。#include<malloc.h>
#define List_init_size 2
#define Listincrement 10
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void LNode_CreateList(LinkList head,int n)//创建链表--顺序法创建链表
{
LinkList p1=head;
int a;
for(int i=1;i<=n;i++)
{
LinkList L1=(LNode*)malloc(sizeof(LNode));
printf("请输入第%d个结点的值域:",i);
scanf("%d",&a);
L1->data=a;
p1->next=L1;
}
free(p1);
}
void LNode_TraveList(LinkList head)//遍历
{
int i=0;
LinkList p;
p=head->next;
printf("空间内的所有数据元素如下:\n");
while(p!=NULL)
{
i++;
printf("链表中第%d个结点的值域是:%d\n",i,p->data);
p=p->next;
}
}
void LNode_Insertlist(LinkList head,int n1,int e)//插入,n1为插入的位置,e 为插入的值
{
LNode L;
LinkList p=head;
L.data=e ;
int i=1;
if(n1<i)
printf("所插入的位置错误。");
else
{
while(i<n1&&p->next!=NULL)//此处应该注意
{
i++;
p=p->next;
}
if(i!=n1)
printf("所插入的位置错误。");
else
{
L.next=p->next;
p->next=&L;
}
}
printf("链表中所有结点的值域如下:");
LNode_TraveList(head);
}
int LNode_Delete(LinkList head,int n2)//删除链表中的一个结点,n2为删除结点的位置
{
LinkList p=head;
int i=1;
int e;
if(n2<i)
printf("所删除的位置错误。\n");
else
{
while(i<n2&&(p->next!=NULL))
{
i++;
p=p->next;
}
if(i!=n2)
printf("所删除的位置错误。\n");
else
{
e=p->data;
p->next=p->next->next;
}
}
// printf("链表中所有结点的值域如下:");
// LNode_TraveList(head);
return e;
}
void MergeList_L(LinkList La,LinkList Lb,LinkList Lc)//合并两个有序链表
{
LinkList pa=La->next;
LinkList pb=Lb->next;
LinkList pc=Lc=La;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
}
void main()
{
int n; //确定结点的个数
int n1;//插入结点的位置
int n2;//删除结点的位置
int e; //所要插入的结点的值域
LinkList head=(LNode*)malloc(List_init_size *sizeof(LNode));
head->next=NULL;
printf("请输入所要创建的链表的结点的个数:\n");
scanf("%d",&n);
LNode_CreateList(head, n);
LNode_TraveList(head);
printf("请输入所要插入结点的位置:");
scanf("%d",&n1);
printf("请输入所要插入结点的值域:");
scanf("%d",&e);
LNode_Insertlist(head,n1,e);
printf("请输入所要删除结点的位置:");
scanf("%d",&n2);
printf("删除的结点的值域为:%d\n",LNode_Delete(head,n2));
}