链表 例程(C++)

转载 2012年03月23日 22:48:58
搬运工:林子木

/***************************************
  链表管理例程
  主要实现功能为:
  0、新建链表
  1、插入成员
  2、查找成员
  3、删除成员
  4、数据浏览
***************************************/
#include "StdAfx.h"
#include <iostream>
#include <cstring>
using namespace std;

/*类声明*/
typedef struct student    //定义student类
{
 int num;
 char name[8];
 struct student * next;
}stud;            //用stud 代替 student类 类型 同typedef int NUM一样原理

/* 函数声明 */
stud * create_list();                    //创建链表
int insert_list(stud * head,char * name,int n);   //插入成员
int del_list(stud * head, char *name);       //删除成员
stud * find_list(stud * head, char * name);     //查找成员
void brow_list(stud * head);            //显示全部

/*主函数*/
void main()
{
 stud * head;  //定义stud类型的指针
 int choice;
 char name[8];
 
 head=NULL;  //指针赋空值
 
 cout<<"1.建立链表"<<endl;
 cout<<"2.插入新生"<<endl;
 cout<<"3.查找学生"<<endl;
 cout<<"4.删除学生"<<endl;
 cout<<"5.数据浏览"<<endl;
 cout<<"0.退出程序"<<endl;
 
 do
 {
  cout<<"请选择操作,输入0~5\n";
  cin>>choice;      //输入功能选择
  if (choice>5||choice<0) 
  {
   cout<<"输入错误\n";
   continue;
  }
  
  switch (choice) 
  { 
  case 1:               //功能1:新建链表
   if (head==NULL)
    head=create_list();
   break;
   
  case 2:
   if (head==NULL)     //功能2: 插入成员
   {
    cout<<"链表未建立\n";
    break;
   }
   while (1) {
    cout<<"姓名(输入0时结束):";
    cin>>name;
    if (strcmp(name,"0")==0) break;
    insert_list(head,name,-1);
   }
   break;
   
  case 3:       //功能3: 查找成员
   cout<<"输入姓名:";
   cin>>name;
   find_list(head,name);
   break;
   
  case 4:       //功能4: 删除成员
   cout<<"输入姓名:";
   cin>>name;
   del_list(head,name);
   break;
   
  case 5:       //功能5: 显示全部成员
   brow_list(head);
   break;
   
  default:
   return;
  }
 } while (1);
}

/*函数实现*/
stud *create_list()  //新建链表
{
 
 stud * head;
 head=new stud;
 
 if (head!=NULL)
  cout<<"链表已建立\n";
 else
  cout<<"没有足够存储空间\07\n";
 head->next=NULL;
 head->num=0;
 
 return head;
}

int insert_list(stud * head,char * name,int n) //插入成员
{
 stud *p, *q, *s;
 s=new stud;
 
 if (s==NULL) 
 {
  cout<<"没有足够空间!\07\n";
  return 0;
 }
 
 q=head;
 p=head->next;
 while (p!=NULL&&n!=q->num) 
 {
  q=p;
  p=p->next;
 }
 q->next=s;
 s->next=p;
 strcpy(s->name,name);
 s->num=q->num+1;
 return 1;
}

stud * find_list(stud * head, char * name) //查找成员
{
 stud * p;
 p=head;
 while(p!=NULL&&strcmp(p->name,name))
 {
  p=p->next;
 }
 if (p!=NULL)
 {
  cout<<"学号:"<<p->num<<"姓名:"<<p->name<<endl;
 }
 else
  cout<<"查无此人!\n";
 return p;
}

int del_list(stud * head, char *name)  //删除成员
{
 stud *p, *q;
 q=head;
 p=head->next;
 while (p!=NULL&&strcmp(p->name,name))
 {
  q=p;
  p=p->next;
 }
 if (p!=NULL)
 {
  q->next=p->next;
  delete p;
  cout<<"删除完成\n";
  return 1;
 }
 else
 {
  cout<<"查无此人\07\n";
  return 0;
 }
}

void brow_list(stud * head)   //显示全部成员
{
 stud *P;
 P=head->next;
 while (P!=NULL)
 {
  cout<<"学号:"<<P->num<<" 姓名:"<<P->name<<endl;
  P=P->next;
 }
}

相关文章推荐

链表的简单创建——C程序设计

题目:创建固定长度的单向链表程序分析:链表是动态分配存储空间的链式存储结构,其包括一个“头指针”变量,其中第0个结点称为整个链表的头结点,头结点中存放一个地址,该地址指向一个元素,头结点一般不存放具体...

c语言_链表实例讲解(两个经典例子)

建立一个学生成绩的线性链表,对其实现插入,删除,输出,最后销毁。  #include #include struct grade  {     int score;    ...

数据结构例程——单链表应用举例

本文针对数据结构基础系列网络课程(2):线性表中第11课时单链表应用举例。例:拆分单链表 (linklist.h是单链表“算法库”中的头文件,详情单击链接…)#include #include #...

数据结构例程——单链表的建立

本文是数据结构基础系列网络课程(2):线性表中第9课时线性表顺序存储的应用中所讲的例程。【例程】   定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。#include #i...

链表的例程

链表的操作

从零开始学C++之标准库类型(三):map 类简介和例程

一、标准库的map类型 使用map得包含map类所在的头文件 template > class map #include   定义一个map对象: map mapTest; //用s...

C++多态--例程详解

* C++多态分为编译时多态和运行时多态. * 编译时多态通过函数或操作符的重载来实现, 见例1. * 运行时多态通过虚函数(包括纯虚函数)来实现, 见例2. * 关键字virtual可用于funct...

标准C++复数运算类详解及使用例程

在C++中复数运算可以通过两种方式来实现:     1)标准C++复数运算库:complex ObjectName(realPart, imagePart);     2)自定义复数运算类:包括复数的...

C++ 内嵌 python 例程

#include int main(int argc, char *argv[]) { PyObject *pName, *pModule, *pDict, *pFunc; //所有针对p...

算法导论 第15章 动态规划 例程C++实现

chapter15.h #ifndef CHAPTER15_H #define CHAPTER15_H //CLRS chapter 15 dynamic programming //full_sp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)