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++版双链表的实现

#define _CRT_SECURE_NO_WARNINGS #include using namespace std; #pragma once typedef int DataType;...

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

#include using namespace std; /* *节点类 */ struct DCNode { int data; DCNode * prior; DCNode * n...

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

// 带头节点单链表的C++实现 #include "stdafx.h" #include #include using namespace std; class CNode ...

数据结构——双向链表实现,基本操作的C++版

对于循环双向链表 判断一个链表是否为空的条件为:head->next==head (头指针) 判断*p为最后一个节点的条件为:p->next=head [cpp] v...

双向循环链表C++实现(带菜单版)

C++实现双向循环链表 包括聊表的创建,插入新结点,删除结点,查询等基本操作,带有操作菜单// 双向循环链表3.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" ...

双向链表的表示与实现(C++版)

双向链表的结点存储结构描述如下:

【c++版数据结构】之用带头节点的单链表实现一元多项式(C语言版)

所实现的一元多项式的结构如下图所示: 若只对多项式进行“求值”等不改变多项式系数和指数的运算,采用类似顺序表的顺序存储结构即可,否则应采用链式存储结构,本文因为要进行一元多项式的加法,加法,乘...

【c++版数据结构】之用c语言实现静态链表

静态链表要解决的问题是:如何静态模拟动态链表关于存储空间申请和释放,动态链表可以借助malloc和free两个函数实现。在静态链表中,由于操作的是数组,不存在像动态链表的节点申请和释放问题,因此我们得...

c++版链表实现

关于链表的解释与数据结构课本一样,只是
  • glianyi
  • glianyi
  • 2014年07月02日 21:13
  • 381

约瑟夫问题的实现(c++链表版)

约瑟夫问题,感觉没什么好说的,为了这个东东百度了一波list   List是一个双向链表,双链表既可以向前又向后链接他的元素。     List将元素按顺序储存在链表中. 与 向量(vecto...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++版-----链表实现
举报原因:
原因补充:

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