标题:求教线性表的基本操作
取消只看楼主
boiy3699
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-9-22
结帖率:50%
已结贴  问题点数:20 回复次数:3 
求教线性表的基本操作
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef int datatype;
typedef struct node
{
datatype data;
struct node *next; 
}node,*Linklist;

void InitList(Linklist *head)
{
Linklist *t = NULL;
t=(Linklist*)malloc(sizeof(node));
head=t;
t->next=NULL;
}

void CreateList(Linklist *head)
{
Linklist last = NULL,t = NULL;
char ch;
t=(Linklist*)malloc(sizeof(node));
head=t;
last=t;
t->next=NULL;
while((ch=getchar())!='$')
{
t=(Linklist*)malloc(sizeof(node));
t->data=ch;
last->next=t;
last = t;
t->next=NULL;
}
}

Linklist*locate(datatype x,Linklist*head)
{
    Linklist *p;
    p=head->next;
    while(p!=NULL)
    if(p->data==x)
    {return p;
    }
    else p=p->next;
    return NULL;
}

void insertafter(Linklist*head,datatype x,Linklist*p)
{
    Linklist *s;
    s=malloc(sizeof(Linklist));//这边malloc前面为什么没有(Linklist*)
    s->data=x;
    s->next=p->next;
    p->next=s;
}

int deleteafter(Linklist *head, Linklist*p)
{
    Linklist *t;
    int r=1;
    if(p->next!=NULL)
    {
        t=p->next;
        p->next=t->next;
        free(t);
    }
    else
        r=0;
    return r;
}
void main()
{
    Linklist*head;
    InitList(head);
    CreatList(head);
    display(head);
    Linklist*locate(x,head);//查找指定值的结点并返回改结点的指针
    deleteafter(head,p);//删除指定值的结点
    display(head);//显示删除后链表的内容
    insertafter(head,x);//在制定节点后插入指定值结点
    ddsplay(head);//显示插入后链表的内容
}

这个主函数有错误吗?还有,这里哪些是二级指针?怎么区分?除了出函数其它各部分分别运行也好多错误啊,错在哪?
搜索更多相关主题的帖子: 线性表 
2011-09-29 20:31
boiy3699
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-9-22
得分:0 
啊。。错误基本上找出来了,但是还是需要添加东西否则程序无法完成要求的动作,进过修改后代码如下
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef int datatype;
typedef struct Linklist
{
datatype data;
struct Linklist *next; 
}Linklist;

void InitList(Linklist *head)
{
Linklist *t = NULL;
t=(Linklist*)malloc(sizeof(Linklist));
head=t;
t->next=NULL;
}

void CreateList(Linklist *head)
{
Linklist *last = NULL,*t = NULL;
char ch;
t=(Linklist*)malloc(sizeof(Linklist));
head=t;
last=t;
t->next=NULL;
while((ch=getchar())!='$')
{
t=(Linklist*)malloc(sizeof(Linklist));
t->data=ch;
last->next=t;
last = t;
t->next=NULL;
}
}

Linklist*locate(datatype x,Linklist*head)
{
    Linklist *p;
    p=head->next;
    while(p!=NULL)
    if(p->data==x)
    {return p;
    }
    else p=p->next;
    return NULL;
}

void display(Linklist*head)
{
    Linklist*t;
if (!(head->next))
    printf("error\n");
    
else  
    {
        t=head;
        while(t->next)
        {
        t=t->next;
        printf("%d",t->data);
        }
    }
}
void insertafter(Linklist*head,datatype y,Linklist*p)
{
    Linklist *s;
    s=malloc(sizeof(Linklist));
    s->data=y;
    s->next=p->next;
    p->next=s;
}

int deleteafter(Linklist *head,Linklist *p)
{
    Linklist *t;
    int r=1;
    if(p->next!=NULL)
    {
        t=p->next;
        p->next=t->next;
        free(t);
    }
    else
        r=0;
    return r;
}
int main()
{
    Linklist*head;
    InitList(head);
    CreateList(head);
    printf("单链表为:"); 
    display(head);
    datatype x;
    scanf("%d",&x);
    locate(x,head);//查找指定值的结点并返回改结点的指针
    Linklist*p;
    
    deleteafter(head,p);//删除指定值的结点
    display(head);//显示删除后链表的内容
    datatype y;
    scanf("%d",&y);
    insertafter(head,y);//在制定节点后插入指定值结点
    display(head);//显示插入后链表的内容
}

2011-10-01 17:04
boiy3699
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-9-22
得分:0 
//删除指定值的结点,这里面参数只有head 和p如何输入指定值呢?用scanf好像不行啊,因为P只是一个指针类型的,求教!!!
2011-10-01 17:05
boiy3699
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-9-22
得分:0 
饿。。。没人回啊,自己顶一下
2011-10-03 20:27



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




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

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