关于链表的一些简单操作

终于上黄金了..

然后就是一波2连败...

最近 完全不想做题啊  一做题 就想碎觉啊

郁闷死了

根据书本 写了点关于单向链表的简单操作

可能还存在点小bug---先放它一马吧

以后可能再进行补充关于它的操作 毕竟还有好多

先慢慢找回敲键盘打代码的感觉

  1 /*
  2     线性表之单向链表的一些常见操作
  3 */
  4 #include <iostream>
  5 using namespace std;
  6
  7 typedef int ElemType;
  8 typedef struct LNode
  9 {
 10     ElemType data;
 11     struct LNode* next;
 12 }LinkList;
 13
 14 /*
 15 建立单向链表----尾插法
 16 */
 17 void CreateLinkList( LinkList* &head , ElemType* arr , int n )
 18 {
 19     cout<<"建立链表:"<<endl;
 20     LinkList* temp , *rend;
 21     head = new LinkList;
 22     rend = head;
 23     for( int i = 0 ; i<n ; i++ )
 24     {
 25         temp = new LinkList;
 26         temp->data = arr[i];
 27         rend->next = temp;
 28         rend = temp;
 29     }
 30     rend->next = NULL;
 31 }
 32
 33 /*
 34 建立单向链表-头插法 这里我不使用它 个人更倾向于尾插法
 35 void CreateLinkList( LinkList* &head , ElemType* arr , int n )
 36 {
 37     LinkList* temp;
 38     head = new LinkList;
 39     head->next = NULL;
 40     for( int i = 0 ; i<n ; i++ )
 41     {
 42         temp = new LinkList;
 43         temp->data = arr[i];
 44         temp->next = head->next;
 45         head->next = temp;
 46     }
 47 }
 48 */
 49
 50 /*
 51 输出单向链表
 52 */
 53 void printList(LinkList* head)
 54 {
 55     LinkList* p = head->next;
 56     cout<<"输出链表:"<<endl;
 57     while( p!=NULL )
 58     {
 59         cout<<p->data<<endl;
 60         p = p->next;
 61     }
 62 }
 63
 64 /*
 65 求链表中第x个结点的值
 66 */
 67 bool getElemType( LinkList* head , int x , ElemType& value )
 68 {
 69     int index = 1;
 70     LinkList* p = head->next;
 71     if( x<=0 )
 72     {
 73         cout<<"fail--error"<<endl;
 74         return false;
 75     }
 76     while( index<x && p!=NULL )
 77     {
 78         index++;
 79         p = p->next;
 80     }
 81     if( p==NULL )
 82     {
 83         cout<<"damn it.this index is not found"<<endl;
 84         return false;
 85     }
 86     else
 87     {
 88         cout<<"success-----"<<endl;
 89         value = p->data;
 90     }
 91     return true;
 92 }
 93
 94 /*
 95 查找特定ElemType的结点标号
 96 */
 97 bool getIndex( LinkList* L , ElemType value , int& index )
 98 {
 99     int i = 1;
100     LinkList* p = L->next;
101     while( p!=NULL && p->data!=value )
102     {
103         p = p->next;
104         i++;
105     }
106     if( p==NULL )
107     {
108         cout<<"dama it.this value is not found"<<endl;
109         return false;
110     }
111     else
112     {
113         cout<<"success~~~~~";
114         index = i;
115     }
116     return true;
117 }
118
119 /*
120 插入ElemType的元素到第I个结点的位置
121 */
122 bool insertElemType( LinkList* &head , int index , ElemType value )
123 {
124     int i = 1;
125     LinkList* p = head;
126     LinkList* temp;
127     if( index<=0 )
128     {
129         cout<<"fail--error"<<endl;
130         return false;
131     }
132     while( i<index && p!=NULL )
133     {
134         i++;
135         p = p->next;
136     }
137     if( p==NULL )
138     {
139         cout<<"****insert fail****"<<endl;
140         return false;
141     }
142     else
143     {
144         temp = new LinkList;
145         temp->data = value;
146         temp->next = p->next;
147         p->next = temp;
148         cout<<"****insert successfully****"<<endl;
149     }
150     return true;
151 }
152
153 /*
154 删除第i个结点,并返回该结点的数据信息
155 */
156 bool deleteNode( LinkList* head , int index , ElemType& value )
157 {
158     int i = 1;
159     LinkList* p = head;
160     LinkList* temp;
161     if( index<=0 )
162     {
163         cout<<"---fail error--"<<endl;
164         return false;
165     }
166     while( i<index && p!=NULL )
167     {
168         i++;
169         p = p->next;
170     }
171     if( p==NULL )
172     {
173         cout<<"****fail delete***"<<endl;
174         return false;
175     }
176     else
177     {
178         temp = p->next;
179         if( temp==NULL )
180         {
181             cout<<"****fail delete****"<<endl;
182             return false;
183         }
184         value = temp->data;
185         p->next = temp->next;
186         cout<<"***delete successfully****"<<endl;
187         delete temp;
188     }
189     return true;
190 }
191
192 /*
193 判断链表是否为空表
194 */
195 bool emptyList( LinkList* head )
196 {
197     return head->next==NULL;
198 }
199
200 /*
201 求出链表的长度
202 */
203 int ListLength( LinkList* head )
204 {
205     int len = 0;
206     LinkList* p = head;
207     while( p->next!=NULL )
208     {
209         len++;
210         p = p->next;
211     }
212     return len;
213 }
214
215 /*
216 删除整个链表
217 */
218 void DestoryList( LinkList* &head )
219 {
220     LinkList* p = head;
221     LinkList* temp = p->next;
222     while( temp!=NULL )
223     {
224         delete p;
225         p = temp;
226         temp = p->next;
227     }
228     delete p;
229 }
230
231 int main()
232 {
233     int arr[20] = {5,2,0,1,3,1,4};
234     LinkList* pList;
235     CreateLinkList( pList , arr , 7 );
236     printList( pList );
237     int value;
238     int index;
239     if( getElemType( pList , 3 , value ) )
240     {
241         cout<<"the value is:"<<value<<endl;
242     }
243     if( getIndex(pList , 1 , index ) )
244     {
245         cout<<"the index is:"<<index<<endl;
246     }
247     if( insertElemType( pList , 6 , 11 ) )
248     {
249         cout<<"成功插入链表元素"<<endl;
250         printList( pList );
251     }
252
253     if( deleteNode( pList , 4 , value ) )
254     {
255         cout<<"the node deleted ‘ s data is:"<<value<<endl;
256         printList( pList );
257     }
258     if( emptyList( pList ) )
259     {
260         cout<<"空表"<<endl;
261     }
262     cout<<"the length is:"<<ListLength(pList)<<endl;
263     DestoryList( pList );
264     return 0;
265 }

today:

  我就希望你可以记住我

  记住我这样活过

  这样在你身边呆过

关于链表的一些简单操作,布布扣,bubuko.com

时间: 2024-12-20 03:29:04

关于链表的一些简单操作的相关文章

二叉树的简单操作

#define _CRT_SECURE_NO_WARNINGS #define m 100 typedef char DataType; typedef struct Node /*二叉链表的结构体*/ { DataType data; struct Node * LChild; struct Node * RChild; }BiTNode, *BiTree; #define Queue_Size 100 typedef BiTree QueueElement; typedef struct /

链表栈的简单实现

今天实现了链表栈的简单实现,贴出来以后可以看一看.链表栈就是用链表来实现栈的一些操作. LinkStack.h #ifndef LINKSTACK_H_ #define LINKSTACK_H_ #include <iostream> using std::cout; using std::endl; using std::ostream; template <typename T> struct Node { T data; Node<T> *next; Node()

ORACLE的安装与网页版创建表空间的简单操作以及PLsql的简单操作

1.oracle的安装: 安装简单易学,在这里不做解释.下载看装包后耐心等待,注意安装目录不要有中文字符,尽量按照指定目录进行安装.安装完成后会占用有大约5g的内存. 如果要卸载oracle,需要用其自带的卸载工具进行卸载[universal installer],然后删除注册表项,删除环境变量,删除目录并且重新启动计算机. 2.在网页版进行创建表空间: 进入网页版: 在电脑的服务中我们可以看到一共有7个oracle的服务项目,其中只有三个是正在启动中.这三项中,只有当OracleDBConso

简单操作只需10秒破解PDF加密文件

简单操作只需10秒破解PDF加密文件 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51345950 如何破解PDF加密文件,如何破解PDF密码呢,破解加密的PDF文件? 从网上下载的PDF文件,由于版权的问题,作者经常会加密禁止读者复制修改等权限,如下面的PDF文档,用Adobe pdf Reader打开时,会显示"已加密"的字样,虽然可以阅读,但不能修改和标记. 为了解决这个问题,可以采用绕过破解密码这一

C++ 文件的简单操作

=================================================================== 编写程序时,很多时候都要对文件进行操作,比如从文件中读取数据,通过程序将一些数据保存到文件中等等.. 以下是c++对文件的一些简单操作. =================================================================== 一.文件输出 要将程序中的数据输出到文件中,一般需要以下5个步骤: ① 包含fstream

链表的特有算法操作

10.42 使用list的算法实现排序和删除重复元素. #include<algorithm> #include<list> #include<iostream> #include<string> using namespace std; void elimDup(list<string> &words) { words.sort(); words.unique(); } bool isShorter(const string &

mysql数据库很简单操作

进入linux系统 root   >/usr/bin/mysql -u root mysql>show databases;                    #查看数据库 mysql>use  testtable;                        #testtable 为所要查看的库,应用数据库 mysql>show tables;                          #查看所有表 mysql>desc abc_table          

ftp简单操作及解说

一.实验拓扑 服务器 ------------------------客户机 二.实验条件 试验机在同一个网段,可以互相ping通. 确定装在了ftp软件包. 三.实验一: 匿名用户与本地用户都可以登录 匿名用户登录到/var/ftp,只能下载不能上传 本地用户登录到本地用户的家目录,可以上传和下载 实验步骤; [[email protected] ~]# rpm -q vsftp              //检测是否安装软件 package vsftp is not installed   

nfs简单操作及解说

NFS的实验报告 一.实验拓扑: 服务器 ----------      客户机 二.实验条件: 服务器的ip:192.168.4.5/24 客户机的ip:192.168.4.200 要确定机器有安装nfs包跟RPC软件包. 三.实验要求: 将/root 共享给192.168.4.200 可写,同步,允许客户机以root权限访问 NFS 服务端操作: 修改配置: [[email protected] ~]# vim /etc/exports    //修改配置的地址 [[email protec