带头结点单链表中数据就地逆置
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编写算法实现带头结点单链表的就地逆置,即利用原带头结点单链表的结点空间把数据元素序列逆置。
四、实验程序:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int datatype;
typedef struct snode
{
datatype data;
return 0;
}
if((q=(slnode*)malloc(sizeof(slnode)))==NULL)exit(1);
q->data=x;
q->next=p->next;p->next=q;
return 1;
}
int slldelete(slnode*head,int i,datatype x)
return 0;
}
*x=p->data;
return 1;
}
int sllnotempty(slnode*head)
{
if(head->next==NULL)return 0;
else return 1;
}
linlistsort(slnode*head)
{
slnode*curr,*pre,*p,*q;
main(void)
{
datatype test[6]={64,6,7,89,12,24};
slnode*head,*p;
int n=6,i;
sllinitiate(&head);
for(i=1;i<=n;i++)
sllinsert(head,i,test[i-1]);
linlistsort(head);
struct snode*next;
}slnode;
sllinitiate(slnode**head);
linlistsort(slnode*head);
int sllinsert(slnode*head,int i,datatype x);
int slldelete(slnode*head,int i,datatype x);
(*head)->next=NULL;
}
int sllinsert(slnode*head,int i,datatype x)
{
slnode*p,*q;
int j;
p=head;j=0;
while(p!=NULL&&j<i-1)
{
p=p->next;j++;
}
if(j!=i-1)
{
printf("the insert-position parameter is wrong!\n");
p=head->next;
head->next=NULL;
while(p!=NULL)
{
curr=head->next;
pre=head;
while(curr!=NULL&&curr->data<=p->data)
{
pre=curr;
curr=curr->next;
}
q=p;
p=p->next;
q->next=pre->next;
{
slnode*p,*q;
int j;
p=head;j=0;
while(p->next!=NULL&&j<i-1)
{
p=p->next;j++;
}
if(j!=i-1)
{
printf("the delete-position parameter is wrong!\n");
return 0;
}
q=p->next;p->next=p->next->next;
x=q->data;
free(q);
return 1;
}
int sllget(slnode*head,int i,datatype*x)
{
slnode*p;
int j;
p=head;j=0;
while(p->next!=NULL&&j<i)
{
p=p->next;j++;
}
if(j!=i)
{
printf("the get-position parameter is wrong!\n");
while(p!=NULL)
{
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
}
实验3:带头结点单链表中数据就地逆置
一、实验目的:
1.会定义单链表的结点类型;
2.熟悉对单链表的一些基本操作和具体的函数定义;
3.了解和掌握单链表的调用格式。
二、实验要求:
1.认真阅读和掌握实验内容所给的程序,并上机运行;
2.保存程序运行结果,并结合程序进行分析;
3.尝试自己调试修改程序并试运行。
三、实验内容:
}
if((q=(slnode*)malloc(sizeof(slnode)))==NULL)exit(1);
q->data=x;
q->next=pre->next;
pre->next=q;
}
converse(slnode*head)
{
slnode*p,*q;
p=head->next;
head->next=NULL;
int sllget(slnode*head,int i,datatype*x);
int sllnotempty(slnode*head);
linlistsurt(slnode*head);
linlistinsert(slnode*head,datatype x);
converse(slnode*head);
linlistinsert(head,25);
converse(head);
p=head->next;
whiltf("%d",p->data);
p=p->next;
}
}
sllinitiate(slnode**head)
{
if((*head=(slnode*)malloc(sizeof(slnode)))==NULL)exit(1);
pre->next=q;
}
}
linlistinsert(slnode*head,datatype x)
{
slnode*curr,*pre,*q;
curr=head->next;
pre=head;
while(curr!=NULL&&curr->data<=x)
{
pre=curr;
curr=curr->next;
四、实验程序:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int datatype;
typedef struct snode
{
datatype data;
return 0;
}
if((q=(slnode*)malloc(sizeof(slnode)))==NULL)exit(1);
q->data=x;
q->next=p->next;p->next=q;
return 1;
}
int slldelete(slnode*head,int i,datatype x)
return 0;
}
*x=p->data;
return 1;
}
int sllnotempty(slnode*head)
{
if(head->next==NULL)return 0;
else return 1;
}
linlistsort(slnode*head)
{
slnode*curr,*pre,*p,*q;
main(void)
{
datatype test[6]={64,6,7,89,12,24};
slnode*head,*p;
int n=6,i;
sllinitiate(&head);
for(i=1;i<=n;i++)
sllinsert(head,i,test[i-1]);
linlistsort(head);
struct snode*next;
}slnode;
sllinitiate(slnode**head);
linlistsort(slnode*head);
int sllinsert(slnode*head,int i,datatype x);
int slldelete(slnode*head,int i,datatype x);
(*head)->next=NULL;
}
int sllinsert(slnode*head,int i,datatype x)
{
slnode*p,*q;
int j;
p=head;j=0;
while(p!=NULL&&j<i-1)
{
p=p->next;j++;
}
if(j!=i-1)
{
printf("the insert-position parameter is wrong!\n");
p=head->next;
head->next=NULL;
while(p!=NULL)
{
curr=head->next;
pre=head;
while(curr!=NULL&&curr->data<=p->data)
{
pre=curr;
curr=curr->next;
}
q=p;
p=p->next;
q->next=pre->next;
{
slnode*p,*q;
int j;
p=head;j=0;
while(p->next!=NULL&&j<i-1)
{
p=p->next;j++;
}
if(j!=i-1)
{
printf("the delete-position parameter is wrong!\n");
return 0;
}
q=p->next;p->next=p->next->next;
x=q->data;
free(q);
return 1;
}
int sllget(slnode*head,int i,datatype*x)
{
slnode*p;
int j;
p=head;j=0;
while(p->next!=NULL&&j<i)
{
p=p->next;j++;
}
if(j!=i)
{
printf("the get-position parameter is wrong!\n");
while(p!=NULL)
{
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
}
实验3:带头结点单链表中数据就地逆置
一、实验目的:
1.会定义单链表的结点类型;
2.熟悉对单链表的一些基本操作和具体的函数定义;
3.了解和掌握单链表的调用格式。
二、实验要求:
1.认真阅读和掌握实验内容所给的程序,并上机运行;
2.保存程序运行结果,并结合程序进行分析;
3.尝试自己调试修改程序并试运行。
三、实验内容:
}
if((q=(slnode*)malloc(sizeof(slnode)))==NULL)exit(1);
q->data=x;
q->next=pre->next;
pre->next=q;
}
converse(slnode*head)
{
slnode*p,*q;
p=head->next;
head->next=NULL;
int sllget(slnode*head,int i,datatype*x);
int sllnotempty(slnode*head);
linlistsurt(slnode*head);
linlistinsert(slnode*head,datatype x);
converse(slnode*head);
linlistinsert(head,25);
converse(head);
p=head->next;
whiltf("%d",p->data);
p=p->next;
}
}
sllinitiate(slnode**head)
{
if((*head=(slnode*)malloc(sizeof(slnode)))==NULL)exit(1);
pre->next=q;
}
}
linlistinsert(slnode*head,datatype x)
{
slnode*curr,*pre,*q;
curr=head->next;
pre=head;
while(curr!=NULL&&curr->data<=x)
{
pre=curr;
curr=curr->next;