//第二章第二题
//第二章第二题
#include<stdio.h>
#include<stdlib.h>
typedef struct DNode
{
int data;
struct DNode *next;
} DNode,*DLinklist;
void init(DLinklist &L) //初始化链表 利用前插法
{
int x=0;
L=(DLinklist)malloc(sizeof(DNode));
L->next=NULL;
printf("请输入:\n");
scanf("%d",&x);
DNode *s;
while(x!=999)
{
s=(DLinklist)malloc(sizeof(DNode));
s->data=x;
s->next=L->next;
L->next=s;
printf("请输入:\n");
scanf("%d",&x);
}
}
void deletelist(DLinklist &L,int e) //删除值为e的元素
{
DLinklist p=L->next,q=L;
while(p!=NULL)
{
if(p->data==e)
{
q->next=p->next;
free(p);
p=q->next;
}
else
{
p=p->next;
q=q->next;
}
}
}
void delete_range(DLinklist &L,int e,int g) //删除值为e的元素
{
DLinklist p=L->next,q=L;
while(p!=NULL)
{
if(p->data>=e&&p->data<=g)
{
q->next=p->next;
free(p);
p=q->next;
}
else
{
p=p->next;
q=q->next;
}
}
}
void vers_print(DLinklist L) //反向输出
{
/* 法一:空间复杂度为o(n)
int data[100],i=0;
DLinklist p=L->next;
while(p!=NULL)
{
data[i]=p->data;
p=p->next;
i++;
}
for(i;i--;i>=0)
{
printf("%d ",data[i]);
}*/
//法二时间复杂度为o(n):
DLinklist L1=L->next,p=L1;
L->next=NULL;
while(L1!=NULL)
{
L1=p->next;
p->next=L->next;
L->next=p;
p=L1;
}
}
void Sort(DLinklist &L) // 排序
{
DNode *p=L->next,*pre,*r=p->next;
p->next=NULL;
p=r;
while(p!=NULL)
{
r=p->next;
pre=L;
while(pre->next!=NULL&&pre->next->data<p->data)
{
pre=pre->next;
}
p->next=pre->next;
pre->next=p;
p=r;
}
}
void print(DLinklist L) //遍历
{
DLinklist p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
void detele_min(DLinklist &L) //删除最小的
{
int min=L->next->data;
DLinklist p=L->next,q,q1,p1=L;
while(p!=NULL)
{
if(p->data<min)
{
min=p->data;
q=p;
q1=p1;
}
else
{
p=p->next;
p1=p1->next;
}
}
q1->next=q->next;
free(q);
printf("min:%d\n",min);
}
int find(int data[],int x) //判断x是否在数组data中
{
for(int i=0;data[i]!='\0';i++)
{
if (data[i]==x)
return 1;
}
return -1;
}
void find_common(DLinklist L1,DLinklist L2) //找到两个链表中相同的结点
{
int data1[100],i=0,j=0;
DLinklist font[100],f;
DLinklist p1=L1->next,p2=L2->next;
while(p1!=NULL)
{
data1[i]=p1->data;
p1=p1->next;
i++;
}
while(p2!=NULL)
{
int x=p2->data;
if(find(data1,x)!=-1)
{
font[j]=p2;
}
j++;
p2=p2->next;
}
// printf(" ok");
j=j-1;
//printf("j:%d\n",j);
for(j;j>=0;j--)
{
f=font[j];
printf("%d ",f->data);
}
// printf("ok1");
}
int main()
{
// DLinklist L;
// init(L);
// print(L);
// vers_print(L);
// printf("------\n");
// deletelist(L,1);
// detele_min(L);
// vers_print(L);
// Sort(L);
// delete_range(L,1,3);
DLinklist L1,L2;
init(L1);
init(L2);
printf("相同的节点:\n");
find_common(L1,L2);
printf("------\n");
return 0;
}
王道第二章综合应用题2-8题 ---------7/20
最新推荐文章于 2022-04-21 15:50:05 发布