0 0

链表实现的问题。20

1. void Add(struct student **ps, int id, char *name, int age);
添加一个记录到链表的末尾

2. void Print(struct student *ps);
打印所有记录

3. void Del(struct student **ps, int id);
删除指定id的记录

4. int Length(struct student *ps);
得到记录的个数

5. void Search(struct student *ps, int id);
查找id匹配的记录并打印结果

6. void Insert(struct student **ps, int id, char *name, int age, int pos);
插入一个新记录
当pos=0时,插入到第一个记录的前面,以此类推
如果pos大于记录的个数,就添加到最后

7. void Empty(struct student **ps);
清空所有记录,即释放所有内存 


这是需要调用的函数,附上源程序,请大家帮忙看看,谢谢。。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student 
{
 int id;
 char name[20];
 int age;
 struct student *next;
};

void Add(struct student **ps, int id, char *name, int age);
void Print(struct student *ps);
void Del(struct student **ps, int pos);
int Length(struct student *ps);
void Search(struct student *ps, int id);
void Insert(struct student **ps, int id, char *name, int age, int pos);
void Empty(struct student **ps);


int main()
{
 struct student *head;
 
 head = NULL;


 Add(&head, 1, "a", 18);
 Add(&head, 2, "b", 19);
 Add(&head, 3, "c", 20);
 Add(&head, 4, "d", 21);

 Print(head);

 Del(&head, 2);
 
 Print(head);

 printf("Length:%d\n", Length(head));

 Search(head, 4);

 Insert(&head, 2, "B", 22, 2);Print(head);

 Empty(&head);
 
 Print(head);

 return 0;
}

void Add(struct student **ps, int id, char *name, int age) 
{
 struct student *p, *q;

 if(!ps) return;
 if(!name) return;

 p = (*ps);
 if (p)
 {
  while (p->next)
  {
   p = p->next;
  }
  p->next = (struct student*)malloc(sizeof(struct student));
  q = p->next;
 }
 else
 {
  (*ps) = (struct student*)malloc(sizeof(struct student));
  q = (*ps);
 }
 if (q)
 {
  q->id = id;
  strcpy(q->name, name);
  q->age = age;
  q->next = NULL;
 } 
 else
 {
  printf("Not enough memory!\n");
  exit(-1);
 }

}
void Print(struct student *ps)
{
 struct student *p = ps;

 printf("%10s%10s%10s\n", "id", "name", "age");
 while (p) 
 {
  printf("%10d%10s%10d\n", p->id, p->name, p->age);
  p = p->next;
 }
} 

void Del(struct student **ps, int pos)
{
 if (!ps) return;
 if (!*ps) return;
 
 struct student *p = *ps,*q = NULL; 
 while (p->next != NULL && pos != 0)
 {
  q = p;
  p = p->next;
  pos--;
 }
 if (pos)
 {
  return;
 } 
 else
 {
  q->next = p->next;
  free(p);
 }
}
int Length(struct student *ps)
{
 int nLen = 0;
 while (ps)
 {
  ps = ps->next;
  nLen++;
 }
 return nLen;
}
void Search(struct student *ps, int id)
{
 while (ps)
 {
  if (ps->id == id)
  {
   printf("id:%d\tname:%s\tage:%d\n", ps->id, ps->name, ps->age);
   break;
  }
  ps = ps->next;
 }
}
void Insert(struct student **ps, int id, char *name, int age, int pos)
{
 if (!ps) return;
 if (!*ps) return;
 
 struct student *p = *ps,*q = NULL; 
 while (p->next != NULL && pos != 0)
 {
  q = p;
  p = p->next;
  pos--;
 }
 if (pos)
 {
  return;
 } 
 else
 {
  p = (struct student *)malloc(sizeof(struct student));

  if (p)
  {
   p->id = id;
   strcpy(p->name, name);
   p->age = age;
   p->next = q->next;
   q->next = p;
  } 
  else
  {
   printf("Not enough memory!\n");
   exit(-1);
  }
 }
}
void Empty(struct student **ps)
{
 if (!ps) return;
 if (!*ps) return;
 
 if((*ps)->next)
 {
  Empty(&((*ps)->next));
 }
 free(*ps);
 (*ps) = NULL;
}

 

 

C 
2011年12月06日 09:56

1个答案 按时间排序 按投票排序

0 0

你的问题是什么??想干什么???没说清楚啊

2011年12月07日 19:37

相关推荐

    java链表实现约瑟夫问题

    约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表

    链表实现集合运算 链表实现集合交并差运算

    链表实现集合运算 链表实现集合交并差运算

    用循环链表实现约瑟夫环问题

    使用c语言中的循环链表及结构体实现约瑟夫环问题

    数据结构 课程设计 用链表实现集合并集 c++

    本项目是关于“用链表实现集合并集”的C++课程设计,主要目的是掌握集合操作以及如何利用链表数据结构高效地实现这些操作。 首先,我们需要了解集合的基本概念。集合是一个无序且不包含重复元素的数学结构。在...

    用链表实现线性表java

    链表实现线性表的基本操作包括添加元素(插入)、删除元素、查找元素以及遍历等。在`ChainList.java`文件中,可能会定义一个名为`Node`的类来表示链表节点,如下所示: ```java class Node { int data; Node next...

    用数据结构-链表实现通讯录管理系统

    本项目以"用数据结构-链表实现通讯录管理系统"为主题,通过C语言实现了这一功能,旨在帮助用户管理他们的联系人信息。下面我们将深入探讨这个系统所涉及的主要知识点。 首先,我们来了解**链表**这一数据结构。链表...

    STM32用链表实现多级菜单

    综上所述,用链表实现STM32的多级菜单是一个涉及数据结构、内存管理、事件处理和用户界面设计等多个方面的综合性任务。通过熟练掌握这些知识点,我们可以创建出高效、易用且可扩展的嵌入式系统用户界面。

    数据机构C语言用双向循环链表实现通讯簿

    在本课程设计中,学生被要求使用C语言来实现一个基于双向循环链表的通讯录系统。这个系统应具备添加、插入、删除、查询和统计联系人信息的基本功能,并且要具备良好的用户界面和错误处理机制,以确保系统的稳定性和...

    链表 实现 c++ cpp 数据结构 作业

    链表 实现 c++ cpp 数据结构 作业 链表 实现 c++ cpp 数据结构 作业

    java编写的循环链表来实现约瑟夫环

    循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释

    C++ 链表实现两个一元多项式相加

    总的来说,C++中链表实现一元多项式的加法是一种巧妙而实用的方法,它结合了数据结构和算法的知识,展示了计算机科学的魅力。通过熟练掌握这样的编程技巧,不仅可以提高编程能力,还能为解决更复杂的问题打下坚实的...

    大数相乘通用链表实现

    通用链表实现是解决这个问题的一种高效方法,它能够处理任意长度的整数,不受固定大小数据类型的限制。本篇文章将深入探讨如何利用链表结构来实现大数相乘,并分析其工作原理和优化策略。 首先,链表是一种动态数据...

    用链表实现图书管理系统

    ### 使用链表实现图书管理系统的知识点 #### 一、链表基本概念 链表是一种常见的数据结构,由一系列节点组成,每个节点包含实际存储的数据和一个指向下一个节点的引用(指针)。在本例中,链表用于实现图书管理系统...

    数组和链表实现队列

    在计算机科学中,数据结构是组织和存储数据的方式,它对于...总之,理解并熟练运用数组和链表实现队列,对于提升算法设计和问题解决能力至关重要。通过不断的实践和学习,可以更好地应对各种复杂的数据结构和算法挑战。

    栈的实现(C语言)数组实现以及链表实现

    栈的实现(C语言)数组实现以及链表实现源码,以及各个功能测试代码函数等 和后缀式转前缀式的用例

    链表实现两个多项式的相加

    本主题关注的是如何使用链表来实现两个多项式的相加。在这个过程中,我们将深入理解链表的特性,并探讨如何利用这些特性来处理数学中的多项式运算。 首先,让我们了解一下链表的基本概念。链表是一种线性数据结构,...

    C语言链表实现学生信息管理

    ### 题目:C语言链表实现学生信息管理 #### 描述: 这是一个用C语言编写的简单程序,通过链表技术实现了学生信息的管理功能。用户可以通过简单的命令行界面执行各种操作,如添加、删除、修改、查询学生信息以及保存...

    利用循环链表实现约瑟夫问题的求解

    利用循环链表实现约瑟夫问题的求解。 约瑟夫问题如下:已知n个人(n&gt;=1)围坐一圆桌周围,从1开始顺序编号。从序号为1的人开始报数,顺时针数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依...

    用链表实现阶乘

    这两者都是链表实现大数运算的基础。 1. 大数加法:遍历两个链表,将对应位的数字相加,同时考虑进位。如果某个链表的长度较短,可以将其视为在前面补零。最后,创建一个新的链表来存储结果。 2. 大数乘法:这涉及...

Global site tag (gtag.js) - Google Analytics