gsd激光美容:建立一个单链表,接受任意输入的整数,直到输入-1为止,将建立好的单链表值按照从小到大顺序输出。

来源:百度文库 编辑:高考问答 时间:2024/04/29 18:39:50

这是实现先从小到大排序,后删除的!注释适当修改下就可以实现插入操作!希望对你有帮助! #include<stdio.h>#include<malloc.h>
#define datatype char
#define maxsize 100
typedef struct node
{
datatype data;
struct node *next;
}linklist;
void line(linklist *head)
{ int i,j,num,k;
char temp;
linklist *tp,*p;
int count_head(linklist *head);
num=count_head(head);
for(i=0;i<num-1;i++)
for(j=0,tp=head->next;j<num-i-1;j++,tp=tp->next)
{ if(tp->data>tp->next->data)
{temp=tp->next->data;
tp->next->data=tp->data;
tp->data=temp;
}
}
p=head->next;
printf("排序后的字符:\n");
while(p!=NULL){

printf(" %c",p->data);
p=p->next;
}
printf("\n");
char a;
linklist *q;
printf("请输入要shanchu的字符:\n");
scanf("%c",&a);
for(i=0,tp=head->next;i<num-1;i++,tp=tp->next)

if(tp->data==a){
q=tp;
tp=head;
while(tp->next!=q)tp=tp->next;
tp->next=q->next;
}

k=count_head(head);
if(k==num) printf("要删除的元素不在单链表中\n");

printf("删除的单链表元素\n");

p=head->next;
while(p!=NULL){
printf(" %c",p->data);
p=p->next;
}
}
/* char a;

linklist *q,*s; printf("请输入要插入的字符:\n");
scanf("%c",&a);
s->data=a;
int count_head(linklist *head);

num=count_head(head);
for(i=0,tp=head->next;i<num-1;i++,tp=tp->next)
if(tp->data>s->data)
{
q=tp;
tp=head;
while(tp->next!=q)tp=tp->next;
s->next=tp->next;
tp->next=s;
}
p=head->next;
while(p!=NULL){
printf(" %c",p->data);
p=p->next;
}*/

int count_head(linklist *head){
int i=0;
//char t;
linklist *p;
p=head->next;

while(p!=NULL){
i++; p=p->next;
}
printf("\n");
return i;
}

linklist *creatlink_head_head(linklist *head){ linklist *t,*p;
char ch;
t=(linklist *)malloc(sizeof(linklist));
head=t;
t->next=NULL;
printf("单链表元素值为单个字符,连续输入,-1为结束字符;");
while((ch=getchar())!='$')
{
t=(linklist *)malloc(sizeof(linklist));
t->data=ch;
t->next=head->next;
head->next=t;}
return(head);

}
main()
{
linklist *head=NULL;
int num;
printf("\n 建立单链表\n\n");
head=creatlink_head_head(head);

fflush(stdin);
line(head);

}

声明一个2个变量的结构,其中一个是整型,存放输入的数,一个是指针,指向下一个结构,如果整型变量等于-1指针为空,然后排序