C++单链表2
2015-10-06 10:26
423 查看
LinkList:
#include<iostream> using namespace std; typedef int elemType; typedef struct Node { elemType data; Node *next; }*LinkList; bool InitList(LinkList *L)//初始化 { *L = new Node; if(!L) return false; (*L)->next = NULL; return true; } bool IsEmpty(LinkList L) { if(L->next==NULL) return false; else return true; } bool ClearList(LinkList *L) { cout<<"Clear List."<<endl; LinkList p,q; p = (*L)->next; if(!p) return true; while(p) { q = p->next; delete p; p=q; } (*L)->next = NULL; return true; } int LengthList(LinkList *L) { //cout<<"The length of list is:"; LinkList p; p = (*L)->next; int i=0; while(p) { p=p->next; i++; } return i; } bool GetElem(LinkList *L, int pos, elemType *pd) { cout<<"Get the "<< pos <<"th item:"; LinkList p; p = (*L)->next; int i=1; while(p && i<pos) { p = p->next; i++; } if(!p || i>pos) return false; *pd = p->data; return true; } //在L中第pos个结点位置之前插入新数据元素x bool InsertList(LinkList *L, int pos, elemType x) { LinkList p,q; int i=1; p = *L; while(p && i<pos) { p = p->next; i++; } if(!p || i>pos) return false; q = new Node; q->data = x; q->next = p->next; p->next = q; return true; } bool DeleteList(LinkList *L, int pos, elemType *y) { int i =1; LinkList p,q; p = *L; while(p->next && i<pos) { p = p->next; i++; } if(!(p->next) || i>pos) return false; q = p->next; *y = q->data; p->next = q->next; delete q; return true; } int Locate(LinkList *L,elemType z) { int i=1; LinkList p; p = (*L)->next; while(p && p->data!= z) { p = p->next; i++; } if(!p) return 0; return i; } void PrintList(LinkList *L) { LinkList p; p = (*L)->next; int i=1; while(p) { cout << i << ":\t"<< p->data <<endl; p = p->next; i++; } } LinkList *Reverse(LinkList *L)//反转单链表 { cout<<"Reverse List:"<<endl; LinkList p,q,s; if((*L)->next->next==NULL || (*L)->next==NULL) return L; p = (*L)->next; q = p->next; (*L)->next->next = NULL; while(q) { s = q->next; q->next = p; p = q; q = s; } (*L)->next = p; return L; } int main() { LinkList L; InitList(&L); for(int i=1;i<7;i++) InsertList(&L,i,i); PrintList(&L); cout<<endl; int x = Locate(&L,2); cout<<"the location of 2 is: "<< x << endl; cout<<endl; cout<<"after delete the 6th item:"<<endl; int num; DeleteList(&L,6,&num); PrintList(&L); cout<<endl; Reverse(&L); PrintList(&L); cout<<endl; return 0; }
相关文章推荐
- 对C语言输入输出流和缓冲区的深入理解
- Java/C++之 public、protected、private ; virtual & abstract
- C++引用
- C语言入门第二讲(Branch分支)
- C语言入门第三讲(循环Cycle)
- C语言第五讲(ArrayPro二维与多维数组)
- C语言第六讲(Function函数)
- C语言第七讲(Struct结构体)
- [c/c++]使用宏函数实现的无锁队列
- C语言第八讲(Pointer指针)
- C语言第九讲(PointerPro)
- c++11——多线程
- Emacs编写C语言和gcc编译问题
- Effective C++ Item 32 确保你的 public 继承模子里出来 is-a 关联
- C++以对象作为返回值时编译器的优化,以及临时变量的析构时机
- 【言简意赅,叼】c++中->怎么用
- More Effective C++ 条款26 限制某个class所能产生的对象数量
- c++ vector实验
- 带你玩转Visual Studio——带你多工程开发
- 解析C++编程中的继承方面的运用