+ -
当前位置:首页 → 问答吧 → 单链表、指针问题

单链表、指针问题

时间:2010-07-26

来源:互联网

本帖最后由 fjianjiang 于 2010-07-26 22:36 编辑

最近在复习DS,在单链表问题上实现一下其中的算法。。问题是在插入结点函数与遍历链表函数中,总是提示指针不匹配(红色注释字符区语句),请大伙帮忙看一下:
定义的数据类型如下:
#include "stdio.h"
#include "stdlib.h"
typedef int ElemType;
typedef struct{
  ElemType data; //数据域
  struct LNode *next; //指针域
}LNode;
typedef LNode *LinkList; //单链表类型名
typedef int State;
State InitList_Link(LinkList L)//初始化单链表;
/*生成一个新结点作为头结点,设置头结点指针域为空*/
{
  if(1)
  {
  L = (LinkList)malloc(sizeof(LNode));
  L->next = NULL;
  return 1;
  }
  else
  {
  return 0;
  }
}

void WarnMessage(char *s)
{
  printf(s);
}

State ListInsert_Link(LinkList L,int i,ElemType e)//在单链表中插入元素;
/*在单链表L中第i个位置之前插入值e的结点,1<=i<=表长+1;*/
{
  int k,len_Link;
  LinkList p = L;
  while(p->next && (k<i-1))/*寻找第i个结点*/
  {
  ++k;
  }
  if(!p || (k > i-1)) /*如果i<1或者大于表长,则出错*/
  {
  WarnMessage("Input Error,Insert Failed!\n");
  return 0;
  }
  else /*否则,生成一个新结点(申请新内存空间),插入结点*/
  {
  LinkList q = (LinkList)malloc(sizeof(LNode));/*为新结点分配内存空间*/
  q->data = e;
  q->next = p->next;
  p->next = q; /*warning: assignment from incompatible pointer type|*/   
  
  return 1;
  }
}

void LNode_Traver(LinkList L)
/*从头结点开始遍历整个链表*/
{
  LinkList p=L;
  while(NULL != p->next)
  {
  printf("%d-->",p->data);
  p = p->next; /*warning: assignment from incompatible pointer type|*/
  }
}



int main(void)
{
  //init the LNode_Link
  printf("Inition the LNode Link:");
  printf("\n--------------------\n");
  LNode LNOde_L;
  int ir = InitList_Link(&LNOde_L);//初始化函数调用
  if(ir)
  {
  WarnMessage("Init OK!\n");
  }
  else
  {
  WarnMessage("Init Failed!");
  }
  printf("\n--------------------\n");
  printf("Insert LNode:\n");
  int loc_id; //插入的位置
  ElemType ins_data; //插入的数值
  printf("please input the insert location:");
  scanf("%d",&loc_id);
  printf("then input the insert data:");
  scanf("%d",&ins_data);
  int ins_r = ListInsert_Link(&LNOde_L,loc_id,ins_data);
  if(ins_r)
  {
  WarnMessage("Insert Success!\n");
  }
  printf("you just insert the data:\n");
  LNode_Traver(&LNOde_L);
  return 0;
}

作者: fjianjiang   发布时间: 2010-07-26

  1. typedef struct{
  2.   ElemType data; //数据域
  3.   struct LNode *next; //指针域
  4. }LNode;
  5. typedef LNode *LinkList; //单链表类型名
复制代码
这个定义有问题吧 ,改为
  1. typedef struct node{
  2.   ElemType data; //数据域
  3.   struct node*next; //指针域
  4. }LNode ,*LinkList; //单链表类型名
复制代码

作者: peijue   发布时间: 2010-07-26

相关阅读 更多