C++版-----链表实现

原创 2007年09月26日 14:30:00

请参考以下链表的基本运算程序完成

实验二 链表的实现----教材p35页实训2

(用实验报告word版,国庆后第一次上课前交)

#include <iostream.h>
#include <stdlib.h>

struct Node
{
 char data;
 struct Node *next;
};

struct Node *CreatListF()//用头插法建立单链表
{
 char ch;
 struct Node *H=NULL;    //链表头指针开始为空
 struct Node *p; //工作指针
// ch=getchar(); //读入第1个字符
 cin>>ch;

// if(ch=='/n')
//  cout<<"你已经退出了!!/n";
/// else{
  while(ch!='0'){
   p=(struct Node *)malloc(sizeof(struct Node));//生成新结点
   p->data=ch;   //将读入的数据放入新结点的数据域中
   p->next=H;
   H=p;
  // ch=getchar(); //读入下一字符
   cin>>ch;
  }//while

 return H;
}


int length(struct Node * H)
{
 int n=1;
 struct Node *p=H;
 if(p==NULL) return -1;
 else{
  while (p->next!=NULL)
  {
   n++;
   p=p->next;
  }
 }
 return n;
}

int Locate(struct Node *H,char x)
{
 int n=1;
 struct Node *p=H;
 while (p!=NULL&&p->data!=x) //查找data域为x的第一个结点
 {
  p=p->next;
  n++;
 }
    if(p==NULL) return -1;
 else return n;
}


void Insert(struct Node **H,char x,int i)
{
 struct Node *s;
 struct Node *q=*H;
 int j=1;
 s=(struct Node *)malloc(sizeof(struct Node));
 s->data=x;
    if(i==1){
   s->next=q;
   *H=s; 
 }
 else{
  while(j<i-1&&q->next!=NULL){
  
   q=q->next;
   j+=1;
  }
  if(j==i-1){
  
   s->next=q->next;
   q->next=s;
  }
 }//else     
}

void Del(struct Node **H,int i)
{
 struct Node *p;
 struct Node *q=*H;
 int j=1;
 if(i==1){
  p=*H;
  *H=(*H)->next;
 }
 else{
  while(j<i-1&&q->next!=NULL){
  
   q=q->next;
   j+=1;
  }
  if(j==i-1){
   p=q->next;  
   q->next=p->next;
  }
  else
   cout<<"删除位置不对/n";  
 }
 if(p!=NULL)
  free(p);
}

void display(struct Node *H)
{
 struct Node *p;
 p=H;
 cout<<"单链表显示:/n";
 if (p==NULL)
  cout<<"链表为空!/n";
    else
 {
  while (p->next!=NULL) //链表存在一个以上的结点时
  {
   cout<<p->data<<"→";
   p=p->next;
  }
  cout<<p->data; //显示存在一个结点或显示最后一个结点
 }
 cout<<endl;
}

int main()
{

 cout<<"请输入字符,提示 :回车表示输入完毕!"<<endl;
 
 struct Node *H=CreatListF();

 display(H);

 cout<<"/n单链表长度="<<length(H)<<endl;
 
 cout<<"值:'a' 的位置:"<<Locate(H,'a')<<endl;
 
 
 cout<<"在位置3插入1个结点'u':/n";
 Insert(&H,'u',4);
 display(H);
 
 cout<<"在位置2插入1个结点'e':/n";
 Insert(&H,'e',2);
 display(H);

 
 cout<<"删除第1个结点:/n";
 Del(&H,1);
 display(H);
/* 
 cout<<"删除第2个结点:/n";
 Del(&H,5);
 display(H);
*/ 
 return 0;
}
 

C++单项链表的构造及简单功能的实现

/* 1.带头结点 2.遍历单项链表 3.删除链表E 4.判断链表是否有序 5.合成2个有序链表 */ #include "iostream" using namespace std; //ty...
  • qq_28711703
  • qq_28711703
  • 2016年05月03日 11:21
  • 396

C++实现链表翻转的两种方法

实现链表翻转有以下两种方法: 建立新链表,依次从旧链表中复制节点,并将其作为头。空间复杂度为O(N) 原地翻转 。空间复杂度为O(1)...
  • kid1ing
  • kid1ing
  • 2017年03月28日 16:11
  • 835

双向循环链表C++实现(完整版)

#include using namespace std; /* *节点类 */ struct DCNode { int data; DCNode * prior; DCNode * n...
  • u011390632
  • u011390632
  • 2014年03月29日 10:58
  • 2828

C++实现链表基本操作

前几天找实习的时候,一个面试官给我留了一个题,做一个链表demo,要求实现创建、插入、删除等操作。 链表是一种常见的数据结构,它是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链...
  • Kevin_zhai
  • Kevin_zhai
  • 2016年01月10日 21:56
  • 35273

单向链表之C++实现

单向链表是常用的数据结构,之前只是看过,没有自己动手实现过,现在来
  • KangRoger
  • KangRoger
  • 2014年07月01日 21:20
  • 8149

单链表的实现(C++版)

// 带头节点单链表的C++实现 #include "stdafx.h" #include #include using namespace std; class CNode ...
  • piaopiaopiaopiaopiao
  • piaopiaopiaopiaopiao
  • 2014年05月12日 20:27
  • 6494

c++实现单链表

#include #include using namespace std; typedef int DataType;struct LinkNode //创建一个节点 { DataTyp...
  • yangrujing
  • yangrujing
  • 2015年08月26日 12:07
  • 890

c++模板链表实现

简介:主要是利用模板实现链表的操作。模板的使用,使得程序的开发量大大地减少。 可以先定义一个链表LinkList,之后可以定义自己的类了(例如:Student类),使用时就可以这样调用了 LinkLi...
  • invisible_sky
  • invisible_sky
  • 2016年03月24日 17:48
  • 869

双向链表的C++实现

转载注明出处http://blog.csdn.net/hongkangwl/article/details/22286469 首先定义节点的结构 struct node { int...
  • hongkangwl
  • hongkangwl
  • 2014年03月27日 14:26
  • 7883

C++实现链表逆序

链表的结构
  • a1037488611
  • a1037488611
  • 2014年10月20日 14:34
  • 1363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++版-----链表实现
举报原因:
原因补充:

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