链表操作
2014-03-23 14:38
218 查看
/* * 程序的版权和版本声明部分 * Copyright (c)2014, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: fibnacci.cpp * 作 者:高古尊 * 完成日期:2014年3月20日 * 版本号: v1.0 * * 输入描述: * 问题描述: * 程序输出: * 问题分析: */ #include<iostream> using namespace std; struct Node { int data; //结点的数据 struct Node *next; //指向下一结点 }; Node *head=NULL; //将链表头定义为全局变量,以便于后面操作 void make_list(); //建立链表 void out_list(); //输出链表 void make_list2(); //建立链表2 void search(int x); //输出链表中是否有值为 x 的结点 void out_list2(); //输出链表2 void delete_first_node(); //删除链表中的第一个结点 void delete_node(int x); //删除结点值为 x 的结点 void make_list3(); //建立链表3 void out_list3(); //输出链表3 void insert(int x); //将值为 x 的结点插入到由 make_list3 建立起来的有序链表中 void paisu(); int main( ) { int x; make_list(); out_list(); make_list2(); out_list2(); cout<<"请输入要找的节点:"; cin>>x; search(x); delete_first_node(); cout<<"删除第一个节点后链表为"; out_list2(); cout<<"请输入要删除的节点:"; cin>>x; delete_node(x); out_list2(); return 0; } void make_list() { int n; Node *p; cout<<"输入若干正数(以 0 或一个负数结束)建立链表:"; cin>>n; while(n>0) //输入若干正数建立链表,输入非正数时,建立过程结束 { p=new Node; //新建结点 p->data=n; p->next=head; //新建的结点指向原先的链表头 head=p; //链表头赋值为新建的节点,这样,新结点总是链表头 cin>>n; //输入下一个数,准备建立下一个结点 } return ; } void make_list2() { int n; Node *p2; head=NULL; cout<<"输入若干正数(以 0 或一个负数结束)建立链表:"; cin>>n; while(n>0) //输入若干正数建立链表,输入非正数时,建立过程结束 { p2=new Node; //新建结点 p2->data=n; p2->next=head; //新建的结点指向原先的链表头 head=p2; //链表头赋值为新建的节点,这样,新结点总是链表头 cin>>n; //输入下一个数,准备建立下一个结点 } return; } void make_list3() { int n; Node *p3; head=NULL; cout<<"输入若干正数(以 0 或一个负数结束)建立链表:"; cin>>n; while(n>0) //输入若干正数建立链表,输入非正数时,建立过程结束 { p3=new Node; //新建结点 p3->data=n; p3->next=head; //新建的结点指向原先的链表头 head=p3; //链表头赋值为新建的节点,这样,新结点总是链表头 cin>>n; //输入下一个数,准备建立下一个结点 } } void out_list() { Node *p=head; cout<<"链表中的数据为:"<<endl; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; return; } void out_list2() { Node *p2; p2=head; cout<<"链表中的数据为:"<<endl; while(p2!=NULL) { cout<<p2->data<<" "; p2=p2->next; } cout<<endl; return; } void out_list3() { Node *p3; p3=head; cout<<"链表中的数据为:"<<endl; while(p3!=NULL) { cout<<p3->data<<" "; p3=p3->next; } cout<<endl; return; } void search(int x) { Node *p2=head; while(1) { if(x==p2->data) { cout<<"节点存在."<<endl; break; } else { p2=p2->next; if(p2==NULL) { cout<<"节点不存在."<<endl; break; } } } return ; } void delete_first_node() { Node *p2=head; if (p2!=NULL) { head= p2->next; delete p2; cout<<"删除了首结点."<<endl; } else { cout<<"空链表,不能删除."<<endl; } return ; } void delete_node(int x) { Node *p2,*q; if (head==NULL) cout<<"空链表,不能删除"; else { //要删除的恰是首结点(不排除连续有若干个结点值为x), while(head!=NULL&&head->data==x) { p2=head; head=head->next; delete p2; } if(head!=NULL) { p2=head; q=p2; while(p2!=NULL) { if(p2->data==x)//q就是该删除的结点 { q->next=p2->next; delete p2; } else //q不该删除,继续考察下一个 { q=p2; } p2=p2->next; //总是p的下一个结点 } } } return; }
相关文章推荐
- [C/C++]反转链表
- C++ 关于STL中sort()对struct排序的方法
- C# Struct的内存布局问题解答
- Linux内核链表实现过程
- 找出链表倒数第n个节点元素的二个方法
- 深入C++中struct与class的区别分析
- Java数据结构之简单链表的定义与实现方法示例
- 浅析c与c++中struct的区别
- 浅析内存对齐与ANSI C中struct型数据的内存布局
- php读取二进制流(C语言结构体struct数据文件)的深入解析
- STL list链表的用法详细解析
- 编码实现从无序链表中移除重复项(C和JAVA实例)
- 结构之美:单链表的初始化、创建与遍历
- 结构之美:单链表的头结点与头指针
- 带头结点与不带头结点的单链表初始化
- 带头结点的单链表的12个基本操作
- 单链表的基础知识问与答
- 结构之美:使用头插法创建单链表
- 结构之美:单链表的销毁删除
- 怎样才算是掌握单链表呢?