//如果是单链表
struct NODE{
int data;
NODE next;
};
void link_list(NODE list1, NODE list2){
NODE p, tail;
for(p=list1, tail=NULL; p; tail=p,p=p->next){}
if(tail)
tail->next = list2;
} //如果是双链表
struct NODE{
int data;
NODE next;
NODE prev;
}; void link_list(NODE list1, NODE list2)
{
NODE p, tail;
for(p=list1, tail=NULL; p; tail=p,p=p->next){}
if(tail && list2){
tail->next = list2;
list2->prev = tail;
}
}
把初始化函数改一下即可。
NodeList(){
mHead=NULL;
mName[0]='\0';
InitializeCriticalSection(&g_cs);
}
#include<stdioh>
#include<stdlibh>
#include<malloch>
typedef struct node
{
int a;//data,懒得改了
struct node prior,next;
}Lnode,Linklist;
Linklist creat(int node_number)
{
if(node_number<1)
return NULL;
Linklist L=NULL;//Head of Linklist
Linklist s,r=NULL;
int x;
printf("请输入链表数据:\n");
scanf("%d",&x);
s=malloc(sizeof(Lnode));
L=s;
s->a=x;
s->prior=NULL;
s->next=NULL;
while(--node_number)
{
scanf("%d",&x);
r=malloc(sizeof(Lnode));
r->a=x;
r->prior=s;
r->next = NULL;
s->next = r;
s = r;
}
return L;
}
Linklist insert(Linklist L,int n)
{
Lnode s,q;
int x;
printf("请输入要插入的数据:\n");
scanf("%d",&x);
if(n==0)
{
s=malloc(sizeof(Lnode));
s->a=x;
s->next=L;
s->prior = NULL;
L=s;
return L;
}
else
{
q=L;
while( (q->next!=NULL) && n>1)
{
q=q->next;
n--;
}
if(n==1)
{
s=malloc(sizeof(Lnode));
s->a=x;
s->next=q->next;
(q->next)->prior = s;
s->prior = q;
q->next=s;
}
else printf("链表插入错误!\n");
return L;
}
}
Linklist delete(Linklist L)//使用关键字
{
Lnode s,q;
int x;
printf("请输入要删除的数据:\n");
scanf("%d",&x);
q = L;
while(q)
{
if(q->a == x)
break;
q=q->next;
}
if(q==NULL)
{
printf("链表中未有该数据\n");
}
else{
s=q->prior;
if(s)
s->next=q->next;
if(q->next)
(q->next)->prior = s;
free(q);
}
return L;
}
void Linklist_print(Linklist p)
{
printf("链表数据输出:\n");
while(p!=NULL)
{
printf(" %6d",p->a);
p=p->next;
}
printf("\n");
}
int main()
{
Linklist L;
L=creat(10);//10个元素
Linklist_print(L);
int n;
printf("\n输入插入节点的位置:\n");
scanf("%d",&n);
L=insert(L,n);
Linklist_print(L);
delete(L);
Linklist_print(L);
return 0;
}
在创建是有个s没有初始化空间。
/创建一个双向链表/
void creatLinklist_Du(duLinklist &L,int n)
{
duNode p;
initLinklist_Du(L);
p=L;
int i;
for(i=0;i<n;i++)
{
duNode s=new duNode;//初始化问题
cin>>s->data;
s->next=L;
s->prior=p;
p->next=s;
L->prior=s;
p=s;
}
}
lz的这个问题是一个很容易让人迷糊的问题。我来解释一下:
struct
node
{
struct
node
prev;
struct
node
next;
}p,
q;
//
这里指针p和q的赋值 *** 作省去
q->prev
=
p->prev;
//
--
1
q->next
=
p;
//
--
2
p->prev->next
=
q;
//
--
3
p->prev
=
q;
//
--
4
这里因为没有存下p的前一个指针,所以有顺序要求:
1
语句4必须在1和3之后。(因为4中将p->prev赋新值之后,就无法得到原来p前的那个节点,所以这句留在最后)
2
其他顺序任意。
以上就是关于试用C语言编写程序,连接任意两个链表.全部的内容,包括:试用C语言编写程序,连接任意两个链表.、C语言线程安全型双向链表的实现、求一用C++写的线性表链式存储(双向链表)插入、删除运算的程序!!!急!!!谢谢!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)