老师给了2道题,好难,怎么弄都有错,大家帮帮忙,给我2个程序
1:单链表的插入与删除
2:快速排序
大家快哦 ,我时间不多啊,后天就要了,明天一定要拿出来的
我做的程序都不能运行的,希望大哥大姐给点能运行的程序
[此贴子已经被作者于2006-9-22 2:10:12编辑过]
/*快速排序*/
void quicksort(node *head,node *rear)
{ node *p,*pre,*s;
p=head->next;/*保存该段中第一个节点(要进行比较的结点),进行遍历*/
s=p;/*遍历指针*/
pre=NULL;/*保存S的上一个结点*/
if(s!=rear) /*出口条件*/
{while(s!=rear)/*做一次遍历*/
{
while(s!=rear&&s->info>=p->info)/*找一个比S小的节点*/
{ pre=s;s=s->next;}/*pre保存当前S的上一个结点*/
if(s!=rear)/*找到要操作的结点*/
{ pre->next=s->next;/*把S取下*/
s->next=head->next;/*找到后将它插入到头节点后*/
head->next=s;
s=pre->next;
}
}
/*------函数递归-------*/
quicksort(head,p);
quicksort(p,rear);
}
}
/*从链表中拆出节点,插入到一新链表中*/
node *paixu(node **head1)
{ node *p,*pre,*s,*q,*head;
p=*head1;pre=NULL;head=NULL;
s=head;q=NULL;
while(p!=NULL)
{ pre=p->next;/*保留P的原值,以便下一次访问*/
p->next=NULL;
if(head==NULL) head=p;
else { s=head; q=NULL;
while((s!=NULL)&&(p->info<=s->info))/*没找到,下移*/
{ q=s;s=s->next;}
if(q==NULL) { p->next=head; head=p;}
else{p->next=s;q->next=p;}
}
p=pre;
}
return(head);
}
#include <string.h>
#include <stdio.h>
#include <malloc.h>
typedef struct lnode{
int data ;
struct lnode *next;
} lnode ;
int n;
struct lnode *createlnode ( void);
struct lnode *createlnode ( void) // 创建链表
{
lnode *head, *p,*r;
head=( lnode *)malloc(sizeof(lnode));
r=head;
head->next=NULL;
scanf("%d",&n);
for (int i=0;i<n;i++)
{p=(lnode *)malloc(sizeof (lnode ));
scanf ("%d",&p->data);
p->next=r->next;
r->next=p;
r=r->next;
}
return (head);
}
void display (lnode *head);
void display (lnode *head)
{
lnode *p;
p=head->next;
while (p!=NULL)
{
printf("%d-->", p->data);
p=p->next;
}
}
void insertlnode (struct lnode *head);
void insertlnode (struct lnode *head) // 插入链表
{
int i,j;
lnode *p,*q;
p=head;
printf(" cha ru de wei zhi shi :\n");
scanf ("%d",&i);
if (i>n)
{ printf("cao chu fan wei ");
}
for (j=0;j<i-1;j++)
{
p=p->next;
}
q=( lnode *)malloc(sizeof(lnode));
printf(" cha ru de shu zhi shi :\n");
scanf ("%d",&(q->data));
q->next=p->next;
p->next=q;
}
void dellnode (lnode *head );
void dellnode (lnode *head ) 删除链表
{
int i,j ,k=0;
lnode *p ,*r ,*q;
p=head;
r=head->next;
q=head->next;
printf ("shan chu jie dian de wei zhi shi : ");
scanf("%d",&i);
while (q!=NULL)
{
q=q->next;
k++;
}
printf ("jiedian ge shu ;");
printf ("%d\n ",k);
if (i>k)
{ printf ("jie dian bu cun zai \n");}
for(j=0;j<i-1;j++)
{
p=p->next;
r=r->next;
}
p->next=r->next;
r->next=NULL;
printf ("cheng gong shan chu ");
}
void main()
{
struct lnode * head=createlnode ();
display(head);
insertlnode(head);
display(head);
dellnode (head );
display(head);
}