线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表

来源:互联网 发布:手机java小游戏代码 编辑:程序博客网 时间:2024/05/16 01:44
#include<iostream>#include<stdlib.h>using namespace std;typedef struct LNode{    int data;    struct LNode *next;//next为指针域,存放其后继结点的地址。}LNode,*LinkList;//采用头插法建立单链表LinkList CreatList1(LinkList &L)//从表尾到表头逆向建立单链表,每次均在头结点之后插入元素{    int x;    LNode *s;    L=(LinkList)malloc(sizeof(LNode));//创建头结点    L->next=NULL;//初始为空链表    cin>>x;    while(x!=7)    {        s=(LNode*)malloc(sizeof(LNode));//创建新结点        s->data=x;        s->next=L->next;        L->next=s;//将新结点插入表中,L为头指针        cin>>x;    }    return L;}//采用尾插法建立单链表LinkList CreatList2(LinkList &L)//从表头到表尾正向建立单链表L,每次均在表尾插入元素{    int x;    L=(LinkList)malloc(sizeof(LNode));    LNode *s,*r=L;//r为表尾指针    cin>>x;    while(x!=7)    {        s=(LNode*)malloc(sizeof(LNode));        s->data=x;        r->next=s;        r=s;//r指向新的表尾结点        cin>>x;    }    r->next=NULL;//尾结点指针置空    return L;}//按序号查找结点的值LNode *GetElem(LinkList L,int i)//取出单链表L(带头结点)中第i个位置的结点指针。{    int j=1;//计数,初始为1    LNode *p=L->next;//头结点指针赋给p    if (i==0)        return L;//若i=0,则返回头结点    if (i<1)        return NULL;//若i无效,则返回NULL    while (p&&j<i){//从第一个结点开始找,查找到第i个结点        p=p->next;        j++;    }    return p;//返回第i个结点的指针,如果i大于表长,p=NULL,直接返回p即可。}//按值查找表结点LNode *LocateElem(LinkList L,int e){    LNode *p=L->next;    while(p!=NULL&&p->data!=e)        p=p->next;    return p;}//计算表长以及打印链表LNode* PrintLength_ListLength(LinkList L,int &length){    int i=0;    LNode *p=L->next;    while(p!=NULL){        cout<<p->data<<" ";        p=p->next;        i++;    }    int *q=&i;    length=*q;    return L;}//删除结点bool ListDelete(LinkList &L,int i){    LNode *p=GetElem(L,i-1);    LNode *q;    q=p->next;    p->next=q->next;    free(q);    return true;}//插入结点bool ListInsert(LinkList &L,int i,int elem){    LNode *q=GetElem(L,i-1);    cout<<q->data<<endl;    LNode *s;    s= (LNode*)malloc(sizeof(LNode));//要记得给新加的结点分配空间    s->next=q->next;    q->next=s;    s->data=elem;    return true;}int main(){    LinkList L;    CreatList2(L);    int length;    //测试表长    PrintLength_ListLength(L,length);    cout<<"表长为:"<<length<<endl;    //测试 插入结点    if (ListInsert(L,3,99))    {        PrintLength_ListLength(L,length);        cout<<"表长为:"<<length<<endl;    }    //测试 删除结点    if (ListDelete(L,3))    {        PrintLength_ListLength(L,length);        cout<<"表长为:"<<length<<endl;    }    return 0;}
0 0