| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1061 人关注过本帖
标题:请高手帮看看我写的这个链表操作的小程序
取消只看楼主 加入收藏
小焦叔叔
Rank: 1
来 自:广西 河池
等 级:新手上路
帖 子:59
专家分:2
注 册:2020-2-15
结帖率:78.57%
收藏
已结贴  问题点数:20 回复次数:0 
请高手帮看看我写的这个链表操作的小程序
这两天开始研究链表操作。写了一个测试操作方法的小程序,节点删除好像节点只删了半个汉字,删得成功也会有一个ASCII码的空格,有时候还会出现乱码。一下子还想不出哪里有问题,望有经验的朋友帮我看看,谢谢!

#include"STDIO.H"
#include"STDLIB.H"
#include"CONIO.H"

#define Enter 0x0D

struct Text
{
    char text;
    struct Text *next;
};
typedef struct Text Text;
Text *HEAD;

Text *Link_Build();
void Link_Output(Text *Head);
void Node_Delect(Text *Head);
void Link_Delect(Text *Head);

void main()
{
    HEAD=Link_Build();
    putch('\n');
    Link_Output(HEAD);
    Node_Delect(HEAD);
    putch('\n');
    Link_Output(HEAD);
    Link_Delect(HEAD);   
}

Text *Link_Build()
{
    Text *Head=NULL,*ptr_1,*ptr_2;
   
    ptr_1=(Text *)malloc(sizeof(Text));
    ptr_1->next=NULL;
    Head=ptr_1;
    ptr_2=ptr_1;
    printf("\n请输入文字,并以Enter键结束:");
    ptr_1->text=getch();
    putch(ptr_1->text);
    while(ptr_1->text!=Enter)
    {
        ptr_1=(Text *)malloc(sizeof(Text));
        ptr_1->text=getch();
        putch(ptr_1->text);
        ptr_1->next=NULL;
        ptr_2->next=ptr_1;
        ptr_2=ptr_1;
    }
   
    return(Head);
}

void Link_Output(Text *Head)
{
    Text *ptr=Head;
   
    while(ptr!=NULL)
    {
        putch(ptr->text);
        ptr=ptr->next;
    }
}

void Node_Delect(Text *Head)
{
    Text *ptr_1,*ptr_2=Head,*ptr_3,*ptr_4;
    char text_h,text_l;
    char Flag=0;
   
    printf("\n请输入要删除的文字:");
    text_l=getch();
    text_h=getch();
    putch(text_l);
    putch(text_h);
    putch('\n');
    while(ptr_4->text!=text_h&&ptr_3->text!=text_l&&ptr_4->next!=NULL)
    {
        ptr_1=ptr_2;
        ptr_2=ptr_1->next;
        if(ptr_2->text==text_h&&ptr_1->text==text_l)
        {
            Flag=1;
            break;                        
        }
        else
        {
            ptr_3=ptr_2->next;
            ptr_4=ptr_3->next;
        }            
    }
    if(Flag==1)
    {
        Head=ptr_3;
        free(ptr_2);
        free(ptr_1);   
    }   
    else if(ptr_4->next==NULL)
    {
        ptr_2->next=NULL;
        free(ptr_4);
        free(ptr_3);
    }
    else
    {
        ptr_1=ptr_4->next;
        ptr_2=ptr_1->next;
        free(ptr_4);
        free(ptr_3);
    }
}

void Link_Delect(Text *Head)
{
    Text *ptr_1,*ptr_2=Head;
   
    while(ptr_2!=NULL)
    {
        ptr_1=ptr_2->next;
        free(ptr_2);
        ptr_2=ptr_1;
    }
    printf("\n内容已删除!\n");
}

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: HEAD next free NULL Text 
2020-02-15 18:11
快速回复:请高手帮看看我写的这个链表操作的小程序
数据加载中...
 
   



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

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