c语言编程,简单点。建立一个单向链表,完成插入和删除,输出相操作后结果。

 我来答
自我编程
2018-05-27 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

只有1个成员的结构组成链表,功能:创建链表、增加节点、删除节点、打印链表。

#include <stdio.h>
#include <malloc.h>
typedef struct stt
{
    char c;
    struct stt *next;
}STT;
void prfSTT(STT *sttHead)//打印链表
{
    while(sttHead->next!=NULL)
    {
        printf("%c",sttHead->next->c);
        sttHead=sttHead->next;
    }
    printf("\n");
}
STT *getSTTS()//创建链表返回首节点
{
    char c;
    STT *newSTT=NULL,*stt0=NULL,*headTail=NULL;
    printf("输入一组字符组成链表:(回车结束输入)\n");
    while(1)
    {
        c=getchar();
        if(c=='\n')
            break;
        newSTT=(STT *)malloc(sizeof(STT));
        newSTT->c=c;
        newSTT->next=NULL;
        if(stt0==NULL)
            stt0=newSTT;
        else
           headTail->next= newSTT;
        headTail=newSTT;
    }
    return stt0;
}
int deleteSTT(STT *sttHead)//删除节点 返回1删除成功, 返回0删除失败
{
    int i=0,cont=0;
    STT *sttLast=NULL,*sttNext=NULL;
    printf("输入要删除第几个节点:");
    scanf("%d",&cont);
    if(cont==1)
    {
        sttNext=sttHead->next->next;
        sttHead->next->next=NULL;
        free(sttHead->next);
        sttHead->next=sttNext;
        return 1;
    }
    while(sttHead->next!=NULL)
    {
        i++;
        if(i==cont-1)
            sttLast=sttHead->next;
        if(i==cont)
        {
            sttNext=sttHead->next->next;
            sttHead->next->next=NULL;
            free(sttHead->next);
            sttLast->next=sttNext;
            return 1;
        }
        sttHead=sttHead->next;
    }
    return 0;
}
int insertSTT(STT *sttHead)//输入超出链表长度,将插入到链表最后位置。输入0则插入在首节点位置。 返回1插入指定位置成功,返回0未找到指定位置插入在最后
{
    int i=0,cont=0;
    STT *newSTT=NULL;
    newSTT=(STT *)malloc(sizeof(STT));
    newSTT->next=NULL;
    printf("给新的节点输入一个字符:");
    scanf("%c",&(newSTT->c));
    printf("输入要插入在第几个节点后面:");
    scanf("%d",&cont);

    while(sttHead->next!=NULL)
    {
        i++;
        if(cont==0)
        {
            newSTT->next=sttHead->next;
            sttHead->next=newSTT;
            return 1;
        }
        if(i==cont)
        {
            newSTT->next=sttHead->next->next;
            sttHead->next->next=newSTT;
            return 1;
        }
        sttHead=sttHead->next;
    }
    sttHead->next=newSTT;
    return 0;
}
int main()
{
    STT *sttHead=NULL;
    sttHead=(STT *)malloc(sizeof(STT));
    sttHead->next=getSTTS();
    printf("\n输入的链表为:\n");
    prfSTT(sttHead);

    printf("\n---开始插入---\n");
    insertSTT(sttHead);
    printf("插入后的链表为:\n");
    prfSTT(sttHead);

    printf("\n---开始删除---\n");
    if(deleteSTT(sttHead))
    {
        printf("删除后的链表为:\n");
        prfSTT(sttHead);
    }
    else
        printf("删除失败!节点不存在!\n");
    return 0;
}
更多追问追答
追问
为什么在调试的时候,在删除节点时,窗口就消失了
我用的是visual studio
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式