链表的简单操作

原创 2011年01月09日 00:10:00

#include<iostream>
using namespace std;
typedef struct node{
    int num;
 node * next;
}Node;    
  
int  insert(Node *head,int m){
    int flag=1;
     Node *n=head,*n1;
  Node *p=new node;
  p->num=m;
  p->next=NULL;
 if(n->num > p->num)
 {
      n->num=p->num-1;
 }

 while(n!= NULL && n->num < p->num) {                     
         n1=n;
      n=n->next;         
     }             
       n1->next=p;
    p->next=n;
 
 return flag;
}


int findlist(Node * head,int m)
{
   Node  *n=head;
   while(n->next != NULL)
   {
      if(n->next->num == m)
    return 1;
   n=n->next;
   }
    return 0;
}

int delete_(Node * head,int m)
{  
  
    Node * n=head,*n1;
 int flag=0;
 if(head->next == NULL)
 {
  cout<<"该链表为空链表,不能删除";
 }
 while(n !=NULL && n->num != m){    
  n1=n;
  n=n->next;
 }
if(n!=NULL){ 
 if(n->num == m){
     n1->next=n->next;
  delete n;
  flag=1;
        cout<<m<<"已经被删除了!"<<endl; 
 }
 else
     flag=0; 
 }
 return flag ;
}
/*打印菜单指令*/
void instructions(void)
{
cout<<"Enter your choice:"<<endl
<<"1 插入一个元素到链表中./n"
<<"2 从链表中删除一个数./n"
<<"3  输入一个数查找是否存在./n"
<<"4  查看链表长度./n"
<<"5  结束退出./n"<<endl;

}

void print(Node * head){
   Node *no=head->next;
   cout<<"当前链表数为:"<<endl;
   while(no->next != NULL){
        cout<<no->num<<"-->";
          no=no->next;
  }
   cout<<no->num<<endl;
}
int isEmpty(Node *head){
   if(head->next == NULL)
    return 1;
   else return 0;

}
int listLength(Node *head){
    int len=0;
 Node * n=head;
 while(n->next!=NULL)
 {
   n=n->next;
   len++;
 }
 return len;
}

int main()
{
  system("color 4e");
  Node *head=new node;
  head->next=NULL;
int choice;
int item,item1;
instructions();/*显示菜单函数*/
cout<<"请选择:";
cin>>choice;
while( choice!=5)
{
  switch(choice)
  {
  case 1:
    cout<<"请输入你想要插入的链表数:";
 cin>>item;
 if(insert(head,item))
 {
 cout<<item<<"已经成功顺序地插入链表中!"<<endl;
 }
    print(head);
  break;
  case 2:
   if(!isEmpty(head)){
   cout<<"请输入你要删除的数";
   cin>>item;  
   if(delete_(head,item)){
   cout<<item<<"被删除!"<<endl;
   print(head);
   }
   else{
    cout<<item<<"没有找到!"<<endl;
     print(head);
   }
   }  
   else cout<<"链表为空,请先输入链表数,再查找!"<<endl;
     break;
  case 3:  
  if(!isEmpty(head)){
   cout<<"Enter character to be found:";
   cin>>item1;
   if(findlist(head,item1))
    cout<<"恭喜你,查找成功!"<<endl;
  else cout<<item1<<" 没有被找到!"<<endl;
  }
 else cout<<"链表为空."<<endl;
    break;
  case 4:
   cout<<"这个链表的长度为: "<<listLength(head)<<endl;
    break;
  case 5:
   cout<<"结束运行!";
   exit(0);
  break;

  default :
   cout<<"Invalid choice."<<endl;
   instructions();
}
 cout<<"请选择:";
 cin>>choice;
}
cout<<"结束运行."<<endl;
return 0;
}


花了好些时间写了,总是感觉收获了! 但是收获什么就不知道了。我的数据结构还是要慢慢地学习了!加油!

单向链表基本操作(C语言实现)

最近学数据结构的链表,就把单向链表的基本操作列了出来,包括链表的建立,链表的插入和删除,链表的查询和遍历,链表的销毁,链表的排序与逆序,链表的合成。 1.链表的建立 一般有两种方式建立链表,头插法和尾...
  • qq_26010491
  • qq_26010491
  • 2015年09月28日 21:57
  • 641

c++实现单链表基本操作

程序媛决定好好学习写代码 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时...
  • u011200403
  • u011200403
  • 2017年02月13日 19:33
  • 978

C++中实现一个简单的单向链表

最近在linux了一个简单的单向链表,直接上代码 链表头文件   list.h #ifndef _LIST_H_ #define _LIST_H_ typedef int T; te...
  • u011641755
  • u011641755
  • 2016年09月17日 21:00
  • 1171

C语言-------实现一个简单的单向链表

编写一个链表程序,在程序中实现简单的功能#include #include struct node{ int num; char name[20]; struct node*...
  • zer1123
  • zer1123
  • 2017年02月09日 20:12
  • 2215

单向链表的简单使用

一、单向链表的概念     单向链表是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。链表是使用指针进行构造的列表,并且是由一个个结点组装起来的,因此又称为结点列表。...
  • silent123go
  • silent123go
  • 2016年09月28日 20:52
  • 1337

一个简单的链表类模板

好久没来学堂了,主要是因为过去的一年里忙得多,学得少,如今我面对着巨大的压力,才深深地感受到学无止境的深切含义。闲话不多说了,回归正题:一个简单的模板链表类。 前段时间,回顾了下C++的模板类的知识...
  • u011963627
  • u011963627
  • 2014年05月03日 15:05
  • 2379

链表的基本操作

链表的基本操作:内容包括链表的创建,增加、删除节点,链表的逆序、排序和销毁等。...
  • conanswp
  • conanswp
  • 2014年04月09日 15:59
  • 86808

链表基本操作及其过程详细叙述

链表概述:链表是一种常见的数据结构。数组可以存放数据,但是使用数组时要先指定数组中包含元素的个数,即数组长度。根据对链表的描述,可以想象到链表就像一个铁链,一环扣一环。然后通过头指针寻找链表中的元素,...
  • dezhihuang
  • dezhihuang
  • 2014年09月07日 10:15
  • 7794

双向链表的基本操作

双向链表的插入顺序: 双向链表的删除顺序: #include #include typedef struct doubleLink { int data;...
  • acm_JL
  • acm_JL
  • 2016年03月21日 20:30
  • 1749

链表建立、删除、插入基本操作

在数据结构中,链表无疑是最基本的,也是在大多数IT公司面试笔试中考察最多的;有了扎实的处理链表的基础,对以后学习更复杂的数据结构类型是很有帮助也是很有必要的;因此在闲暇时间中,又再一次重写了对于链表的...
  • wenhai_zh
  • wenhai_zh
  • 2013年07月29日 12:05
  • 3043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表的简单操作
举报原因:
原因补充:

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