| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1119 人关注过本帖
标题:求教线性表的基本操作
只看楼主 加入收藏
boiy3699
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-9-22
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:6 
求教线性表的基本操作
程序代码:
#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
世界模型
Rank: 4
等 级:业余侠客
威 望:1
帖 子:240
专家分:226
注 册:2010-9-12
收藏
得分:10 
一边写 一边编译 才能快捷找出错误在哪 耐心
2011-09-30 10:36
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:10 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;
typedef char ElemType;

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

Status InitList(LinkList &L)
{//构造链表L
    L=(LinkList)malloc(sizeof(LNode));
    if(!L)
    exit(OVERFLOW);
    L->next=NULL;
    return OK;
}

void DestoryList(LinkList &L)
{//销毁链表L
    LinkList p;
    while(L)
    {
        p=L->next;
        free(L);
        L=p;
    }
}

Status ClearList(LinkList L)
{//清空链表L
    LinkList p=L->next;
    L->next=NULL;
    DestoryList(p);
}

Status ListEmpty(LinkList L)
{//判断链表是否为空
    if(L->next)
    return FALSE;
    return TRUE;
}

int ListLength(LinkList L)
{//返回链表的长度
    int i=0;
    LinkList p=L->next;
    while(p)
    {
        i++;
        p=p->next;
    }
    return i;
}

Status GetElem(LinkList L,int i,ElemType &e)
{//用e返回链表第i个元素的值
    int j=1;
    LinkList p=L->next;
    while(p&&j<i)
    {
        j++;
        p=p->next;
    }
    if(!p||j>i)
    return ERROR;
    e=p->data;
    return OK;   
}

Status ListInsert(LinkList L,int i,ElemType e)
{//在链表第i个位置之前插入元素e
    int j=0;
    LinkList s,p=L;
    while(p&&j<i-1)
    {
        j++;
        p=p->next;
    }
    if(!p||j>i-1)
    return ERROR;
    s=(LinkList)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return OK;   
}

Status ListDelete(LinkList L,int i,ElemType &e)
{//删除链表第i个元素,并用e返回其值
    int j=0;
    LinkList q,p=L;
    while(p->next&&j<i-1)
    {
        j++;
        p=p->next;
    }
    if(!(p->next)||j>i-1)
    return ERROR;
    q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
    return OK;
}

int LocateElem(LinkList L,ElemType e,Status(*compare)(ElemType,ElemType))
{//返回链表中第一个与e满足关系compare()的数据元素的位序
    int i=0;
    LinkList p=L->next;
    while(p)
    {
        i++;
        if(compare(p->data,e))
        return i;
        p=p->next;
    }
    return 0;
}

Status PriorElem(LinkList L,ElemType cur_e,ElemType &pre_e)
{//返回元素cur_e的前驱
    LinkList p=L->next;
    while(p->next)
    {
        if(cur_e==p->next->data)
        {
            pre_e=p->data;
            return OK;
        }
        p=p->next;
    }
    return ERROR;
}

Status NextElem(LinkList L,ElemType cur_e,ElemType &next_e)
{//返回元素cur_e的后继
    LinkList p=L->next;
    while(p->next)
    {
        if(cur_e==p->data)
        {
            next_e=p->next->data;
            return OK;
        }
        p=p->next;
    }
    return ERROR;
}

void InputList(LinkList L)
{//输入链表
    char c;
    LinkList s,p=L;
    while((c=getchar())!='$')
    {
        s=(LinkList)malloc(sizeof(LNode));
        s->data=c;
        s->next=p->next;
        p->next=s;
        p=s;
    }
}
Status PrintList(LinkList L)
{//输出链表
    if(ListEmpty)
    {
        LinkList p=L->next;
        while(p)
        {
            printf("%c ",p->data);
            p=p->next;
        }
        printf("\n");
        return OK;
    }
    return ERROR;
}

int main()
{
    LinkList La,Lb;
    InitList(La);
    InitList(Lb);
    InputList(La);
    PrintList(La);
    InputList(Lb);
    PrintList(Lb);   
    return 0;
}
2011-09-30 21:27
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
hikaru04
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-5
收藏
得分:0 
一样不明白

[ 本帖最后由 hikaru04 于 2012-6-5 11:14 编辑 ]
2012-06-05 11:13
快速回复:求教线性表的基本操作
数据加载中...
 
   



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

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