| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1149 人关注过本帖
标题:单链表的基本操作(建立、查找、插入、删除)程序运行到调用函数那块就出错 ...
取消只看楼主 加入收藏
ssgurt
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-9-27
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
单链表的基本操作(建立、查找、插入、删除)程序运行到调用函数那块就出错了,哪位大神帮我看看
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct linknode{
  int data;
  struct linknode *next;
}Link, *Links;

void Create_link(Links L,int n)
{
  Link *head,*p,*q;
  int i;
  L=(Links)malloc(sizeof(Link));
  if(!L)
    return;
  L->next=NULL;
  head=L;
  p=head;
  for(i=0;i<n;i++)
  {
    q=(Links)malloc(sizeof(Link));
    scanf("%d",&q->data);
    p->next=q;
    p=q;
  }
  p->next=NULL;
  return;
}
void Get_Element(Links L,int n)
{
  Link *p;
  int i=0;
  p=L->next;
  while(p->next&&i<n-1)
  {
    p=p->next;
    ++i;
  }
  if(!p||i>n-1)
    return;
  printf("%d",p->data);
}
void Insert_list(Links L,int i,int elem)
{
  Link *p, *q;
  int j=0;
  p=L;
  while(p->next&&j<i-1)
  {
    p=p->next;
    j++;
  }
  if(!p||j>i-1)
    return;
  q=(Links)malloc(sizeof(Link));
  q->next=p->next;
  p->next=q;
  q->data=elem;
  return;
}
void Delete_list(Links L,int i)
{
  Link *p, *q;
  int j;
  p=L->next;
 
  for(j=0;j<i-1;j++)
  {
    p=p->next;
  }
  if(!(p->next)||j>i-1)
    return ;
  q=p->next;
  p->next=q->next;
  return;
}

void Traverse(Links L)
{
  Link *p;
  p=L->next;
  while(p->next!=NULL)
  {
    printf("%d",p->data);
  }
}
 
int main()
{
  Link L;
  int num,n,i,j,elem;
  char match[20];
  printf("请输入链表中元素的个数及元素: \n");
  scanf("%d",&num);
  Create_link(&L,num);
  printf("请输入操作次数: \n");
  scanf("%d",&n);
  printf("请选择操作(Get、Insert、Delete): \n");
  while(num!=0&&n!=0)
  {
    for(i=0;i<n;i++)
    {
      scanf("%s",match);
      if(!strcmp(match,"Get"))
      {
        printf("请输入要查找元素的位置: ");
        scanf("%d",&j);
        Get_Element(&L,j);
      }
      if(!strcmp(match,"Insert"))
      {
        printf("请输入要插入元素的位置及元素: ");
        scanf("%d%d",&j,&elem);
        Insert_list(&L,j,elem);
      }
      if(!strcmp(match,"Delete"))
      {
        printf("请输入要删除元素的位置: ");
        scanf("%d",&j);
        Delete_list(&L,j);
      }
    }
  }
  Traverse(&L);
  return 0;
}
搜索更多相关主题的帖子: include return 
2016-09-27 10:42
ssgurt
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-9-27
收藏
得分:0 
回复 3楼 书生牛犊
我改好了,其实只要在Create_list(Links &L,int n)这里加个取地址符,另外再在子函数的一些小毛病处修改下程序就能运行了。而且我发现这个取地址符非留不可,Links不是结构体的指针类型吗?Links &L是为甚么又对指针类型的L用& ??
2016-09-28 00:13
ssgurt
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-9-27
收藏
得分:0 
回复 7楼 word123
那么Links *L和Links &L是等效的吗?那不就是struct linknode **L和struct linknode *&L,指针再指针,这样的定义是表示地址的地址?这样的用法真不太懂
2016-09-28 13:46
快速回复:单链表的基本操作(建立、查找、插入、删除)程序运行到调用函数那块就 ...
数据加载中...
 
   



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

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