首页 新闻 会员 周边

C语言类型重定义错误

0
悬赏园豆:10 [已解决问题] 解决于 2012-09-23 10:27
#include<stdio.h>

#define Maxsize 7 

typedef int DataType;

//顺序表定义
typedef struct {
    DataType data[Maxsize];
    int length;
}SeqList;

void InsertSeqlist(SeqList* L,DataType x,int i);
void DeleteSeqlist(SeqList* L,int i);
int LocateSeqlist(SeqList* L,DataType x);

//单链表定义
typedef struct node{
    DataType data;      //数据域
    struct node* next;//指针域
} Node,*LinkList;

LinkList InitateLinkList();
int LengthLinkList(LinkList head);
Node * GetLinkList(LinkList head,int i);
int LocateLinkList(LinkList head,DataType x);
void InsertLinkList(LinkList head,DataType x,int i);
void DeleteLinkList(LinkList head,int i);

LinkList head;

 

Liner.h

#include<stdio.h>
#include<stdlib.h>
#include"Liner.h"

void InsertSeqlist(SeqList* L,DataType x,int i)
{
    int j=0;
    //将元素x插入到顺序表L的第i个数据元素之前
    if(L->length==Maxsize)
    {
        exit(1);
    }

    //检测位置
    if(i<1 || i>L->length+1) exit(1);

    for(j=L->length;j>=i;j--)
        L->data[j]=L->data[j-1];

    L->data[j]=x;
    L->length++;
}

void DeleteSeqlist(SeqList* L,int i)
{
    int j=0;
    if(i<1 || i>L->length)
    { 
        printf("删除位置错误!");
        exit(1);
    }

    //删除操作
    for(j=i-1;j<L->length-1;j++)
    {
        L->data[j]=L->data[j+1];
    }

    L->length--;
}

int LocateSeqlist(SeqList* L,DataType x)
{
    int i=0;
    while((i<L->length) && L->data[i]!=x)
    i++;
    if(i<L->length) return i+1;
    else return 0;
}

//单链表操作算法
LinkList InitateLinkList()
{
    //建立一个空的单链表
    LinkList head;
    head=(LinkList)malloc(sizeof(Node));//强制转换
    head->next=NULL;
    return head;
}

int LengthLinkList(LinkList head)
{
    //求单链表的长度
    Node *p=head;
    int cnt=0;
    while(p->next!=NULL)
    {
        p=p->next;
        cnt++;
    }
    return cnt;
}

Node * GetLinkList(LinkList head,int i)
{
    int c=1;
    //获取指定为位置的节点
    Node *p;
    p=head->next;//head节点不存储数据
    
    while(c<i && p!=NULL)
    {
        p=p->next;c++;
    }

    if(i==c) return p;
    else return NULL;
}

int LocateLinkList(LinkList head,DataType x)
{
    //根据数据元素查找位置
    int i=1;
    Node *p=head->next;

    while(p!=NULL && p->data!=x)
    {
        p=p->next;i++;
    }

    if(p->data==x) return i;
    else return 0;
}

void InsertLinkList(LinkList head,DataType x,int i)
{
    Node *p;
    Node *pre;
    Node *node;
    int index=0;

    //在表head的第i个数据元素节点之前插入一个以x为值的新节点

    if(1>i || i>LengthLinkList(head))
    {
        printf("对不起,插入位置错误!插入位置介于%d至%d",1,LengthLinkList(head));
        exit(1);
    }

    
    p=head->next;
    pre=NULL;//上一个
    while(p!=NULL && index+1!=i)
    {
        pre=p;
        p=p->next;index++;
    }

    //插入操作
    if(index+1==i)
    {
        node=(Node*)malloc(sizeof(Node));
        node->data=x;
        node->next=p;
        pre->next=node;
    }
}

void DeleteLinkList(LinkList head,int i)
{
    Node *q,*p;
    if(i==1) q=head;
    else q=GetLinkList(head,i-1);

    if(q!=NULL && q->next!=NULL)
    {
        p=q->next;
        q->next=p->next;
        free(p);
    }
    else exit(1);

}

 

Liner.c

错误提示:

错误 1 error C2371: “SeqList”: 重定义;不同的基类型 datastruct\datastruct\linearl.h 11 1 DataStruct

错误 2 error C2011: “node”:“struct”类型重定义 datastruct\datastruct\linearl.h 14 1 DataStruct

IceS的主页 IceS | 初学一级 | 园豆:197
提问于:2012-09-23 09:49
< >
分享
最佳答案
0

插入第i个数,插错了吧应该是L.data[j]=x;应该是L.data[j-1]=x;吧

收获园豆:10
blue fire | 菜鸟二级 |园豆:211 | 2012-09-23 10:10

没有错误,这个问题是工程项目本身的问题。新建一个项目后把代码拷贝过去编译通过...

IceS | 园豆:197 (初学一级) | 2012-09-23 10:25

@IceS: 编译是可以通过,是你插入的地方要的错了

blue fire | 园豆:211 (菜鸟二级) | 2012-09-23 10:29

@blue fire:  if(i<1 || i>L->length)
    {
        printf(
"删除位置错误!");
        exit(
1);
    }
这个也错了吧,你下面i<L->length-1,那么上面就应该是

if(i<1 || i>=L->length)
{
printf(
"删除位置错误!");
exit(
1);
}

blue fire | 园豆:211 (菜鸟二级) | 2012-09-23 10:37

@blue fire: 没有错误,下面是测试代码。

#include<stdio.h>
#include"Liner.h"


int main(void)
{
    int i=0;

    SeqList student={{0},0};//声明并初始化
    InsertSeqlist(&student,1,1);
    InsertSeqlist(&student,2,2);
    InsertSeqlist(&student,3,3);
    InsertSeqlist(&student,4,4);
    printf("显示信息表元素:");
    PrintfSeqList(student);
    printf("线性表长度:%d\r\n\r\n",student.length);

    for(i=student.length;i>0;i--)
    {
        printf("执行删除操作...\r\n删除第%d个\r\n",i);
        DeleteSeqlist(&student,i);
        PrintfSeqList(student);
        printf("\r\n");
    }

    getchar();
    return 0;
}
IceS | 园豆:197 (初学一级) | 2012-09-23 20:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册