标题:单链表插入不到最后(插在最前或者中间都可以)
只看楼主
a76962934
Rank: 2
等 级:论坛游民
帖 子:39
专家分:53
注 册:2012-5-30
结帖率:75%
已结贴  问题点数:20 回复次数:2 
单链表插入不到最后(插在最前或者中间都可以)
#include <stdio.h>
#define N 5
typedef struct node
{
    int number;
    float wage;
    struct node *link;
}stu;
stu *creat(int n)
{
    stu *h,*p,*s;
    int i;
    if((h=(stu*)malloc(sizeof(stu)))==NULL)
    {
        printf("error:\n");
        return 0;
    }
    h->number='\0';
    h->wage='\0';
    h->link=NULL;
    p=h;
    for(i=0;i<n;i++)
    {
        if((s=(stu*)malloc(sizeof(stu)))==NULL)
        {
            printf("error:\n");
            return 0;
        }
        p->link=s;
        printf("input number,wage:\n");
        scanf("%d%f",&s->number,&s->wage);
        s->link=NULL;
        p=s;
    }
    return (h);
}
list(stu *h)
{
    stu *q;
    for(q=h->link;q!=NULL;q=q->link)
    {
        printf("%d\t%f\n",q->number,q->wage);
    }
}
stu *insert(stu *h)
{
    stu *p,*q,*s;
    int number;
    float wage;
    p=h->link;;
    printf("input insert number:\n");
    scanf("%d%f",&number,&wage);
    if((s=(stu*)malloc(sizeof(stu)))==NULL)
        {
            printf("error:\n");
            return 0;
        }
    if(p->number>number)
    {
        h->link=s;
        s->link=p;
        s->number=number;
        s->wage=wage;
    }
    else
    {
       while((p->number<number)&&(p!=NULL))
       {
         q=p;
         p=p->link;
       }
       if(p!=NULL)
       {
         q->link=s;
         s->link=p;
       }
       else
       {
           q->link=s;
           s->link=NULL;
       }
       s->number=number;
       s->wage=wage;
    }
    return h;
}
main()
{
    stu *h;
    h=creat(N);
    list(h);
    insert(h);
    list(h);
}
搜索更多相关主题的帖子: include return number 
2012-12-24 17:46
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
得分:10 
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define maxsize 100
#define ok 1
#define error 0
int yes=0;
typedef char elemtype;
typedef struct lnode/*创建单链表节点结构*/
{
    char data;
    struct lnode *next;
}lnode, *linklist;
void createlinklist(linklist *l)/*创建单链表*/
{
    int i,n;
    linklist p,q;
    char ch;
    printf("请输入单链表的长度:\n");
    scanf("%d",&n);
    (*l)=(linklist)malloc(sizeof(lnode));
    (*l)->next=NULL;/*初始化单链表*/
    printf("请输入单链表的元素:\n");
    for(i=0;i<n;i++)
    {
        p=(linklist)malloc(sizeof(lnode));
        scanf("%c",&ch);
        if((ch=getchar())!='\n')
        {
            p->data=ch;
            p->next=(*l)->next;
            (*l)->next=p;
        }
    }
    printf("此时单链表元素为:\n");/*接着输出插入元素后的单链表*/
    for(i=1;i<=n;i++)
    {
        printf("%3d",i);
    }
    printf("\n");
    q=(*l)->next;
    while(q)
    {
        printf("%3c",q->data);
        q=q->next;
    }
    printf("\n");
    yes=1;
}
int listinsert(linklist l,int i,char e)
{
    linklist p=l,s,q;
    int j=0,n;
    while(p!=NULL&&j<i-1)/*找到第i-1个位置并让p指针指向它*/
    {
        p=p->next;
        j++;
    }
    if(!p)
    {
        printf("插入的位置不合法,请重新选择插入点!\n");
        return error;
    }
    s=(linklist)malloc(sizeof(lnode));
    printf("请输入插入的位置:\n");
    scanf("%d",i);
    printf("请输入插入的元素值:\n");
    scanf("%d",&e);
    if((e=getchar())!='\n')
    {
        s->data=e;
        s->next=p->next;
        p->next=s;
    }
    printf("此时单链表元素为:\n");/*接着输出插入元素后的单链表*/
    for(i=1;i<=n;i++)
    {
        printf("%d",i);
    }
    printf("\n");
    q=l->next;
    while(q)
    {
        printf("%c",q->data);
        q=q->next;
    }
    printf("\n");
    return ok;
   
}
int listdelete(linklist l,int i,char *e)
{
    linklist p=l,q;
    int j,n;
    while(p!=NULL&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p)
    {
        printf("删除的位置不合法,请重新选择插入点!\n");
        return error;
    }
    printf("请输入删除元素的位置:\n");
    scanf("%d",&i);
    q=p->next;
    p->next=q->next;
    *e=q->data;
    free(q);
    return *e;
    printf("此时单链表元素为:\n");/*接着输出删除元素后的单链表*/
    for(i=1;i<=n;i++)
    {
        printf("%d",i);
    }
    printf("\n");
    q=q->next;
    while(q)
    {
        printf("%c",q->data);
        q=q->next;
    }
    printf("\n");
}
int main(void)
{
    linklist l;
    char e,ch;
    int i;
    createlinklist(&l);
    listinsert(l,i,e);
    listdelete(l,i,&ch);
    return ok;
}







收到的鲜花
  • a769629342013-01-06 12:39 送鲜花  2朵  

菜鸟也疯狂
2012-12-24 18:12
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:10 
程序代码:
stu *insert(stu *h)
{
    stu *p, *s;
    if ((s = (stu*)malloc(sizeof(stu)))==NULL)
    {
        printf("error:\n");
        return 0;
    }
    p = h;s->link = NULL;
    printf("input insert number:\n");
    scanf("%d%f",&s->number,&s->wage);
    if (!p->link)    p->link = s;
    while((p->link->link != NULL)&&(p->link->number < s->number))
    {
        p = p->link;
    }
    s->link = p->link->link;
    p->link->link = s;
    return h;
}
收到的鲜花
  • a769629342013-01-06 12:39 送鲜花  4朵  


[fly]存在即是合理[/fly]
2012-12-24 21:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-393268-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021610 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved