| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1119 人关注过本帖
标题:求教线性表的基本操作
取消只看楼主 加入收藏
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
快速回复:求教线性表的基本操作
数据加载中...
 
   



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

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