C++ 单链表

来源:互联网 发布:企业数据管理软件 编辑:程序博客网 时间:2024/06/06 01:58

C++与数据结构之单链表。

链表的最大优点就是能够实现内存更好的分配,不会造成离散地址空间的浪费,但是相应的,该方法需要更多的地址来存储地址。在插入、删除的时间效率上提高了,但是在内存上却比顺序表占用得更多。

本程序主要的功能是头插法/尾插法创建链表,然后实现查找、插入、删除功能。

有问题欢迎留言继续讨论,博主也是新手。



#include<iostream>#include<time.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0using namespace std;typedef int ElemType;typedef int Status;typedef struct Node{ElemType data;struct Node *next;} Node;typedef struct Node *Linklist;//用e返回L中第i个数据元素的值Status GetElem(Linklist L,int i,ElemType *e){int j;Linklist p;p = L->next;j=1;while(p && j<i){p = p->next;++j;}if(!p || j>i)return ERROR;*e = p->data;cout<<endl;cout<<"第"<<i<<"个位置的数是"<<p->data<<endl;return OK;}//在L中第i个结点位置之前插入新的数据元素eStatus ListInsert(Linklist *L,int i ,ElemType e){int j;Linklist p,s;p = *L;j = 1;while(p && j<i){p = p->next;++j;}if(!p || j>i)return ERROR;s = (Linklist)malloc(sizeof(Node));s->data = e;s->next = p->next;p->next = s;cout<<"位置3插入500后的链表为"<<endl;p=*L;for(i=0;i<11;i++){p=p->next;cout<<"  "<<p->data;}cout<<endl;return OK;}//删除L的第i个结点,并用e返回其值,L的长度减1Status ListDelete(Linklist *L,int i,ElemType *e){int j;Linklist p,q;p = *L;j = 1;while(p->next && j<i){p = p->next;++j;}if(!(p->next) || j>i)return ERROR;q = p->next;p->next = q->next;*e = q->data;cout<<"位置3删除的数为"<<q->data<<endl;cout<<"删除元素后的链表为"<<endl;p=*L;for(i=0;i<10;i++){p=p->next;cout<<"  "<<p->data;}free(q);return OK;}//头插法创建带表头结点的单链线性表Lvoid CreateListHead(Linklist *L,int n){Linklist p;int i;srand  ( time(0) );*L = (Linklist)malloc(sizeof(Node));(*L)->next = NULL;cout<<"The List created by head is "<<endl;for(i=0;i<n;i++){p = (Linklist)malloc(sizeof(Node));p->data = rand()%100 + 1;cout<<"  "<<p->data;p->next = (*L)->next;(*L)->next = p;}}//尾插法,建立带表头结点的单链线性表Lvoid CreateListTail(Linklist *L,int n){Linklist p,r;int i;srand ( time(0));*L = (Linklist) malloc (sizeof(Node));r = *L;cout<<"尾插法创建链表为 "<<endl;for(i =0 ;i<n;i++){p = (Node *)malloc(sizeof(Node));p->data = rand()%100 + 1;cout<<"  "<<p->data;r->next = p;r = p;}r->next = NULL;}int main(){Linklist a;int n=10,c;int  b;CreateListTail(&a,n);GetElem(a,2,&b);ListInsert(&a,3,500);ListDelete(&a,3,&b);return 0;}


运行结果如下:


0 0
原创粉丝点击