使用链表的基本操作

来源:互联网 发布:条码打印软件免费版 编辑:程序博客网 时间:2024/06/04 01:17
//动态链表#include <stdlib.h>typedef struct node{    int a;    struct node *next;}NODE,*PNODE;//构建链表PNODE creat_(){    PNODE head,q,p;//定义头指针head,代替头指针球q(头指针不能动)    head=(PNODE)malloc(sizeof(NODE));//分配内存给head    if(head==NULL)    {        printf("分配内存失败");    }    head->next=NULL;    int num,num_,i;    scanf("%d",&num);    q=head;//代替头指针q    for(i=0;i<num;i++)    {        p=(PNODE)malloc(sizeof(NODE));//开辟一个节点,并让p指向它        scanf("%d",&num_);        p->a=num_;        q->next=p;//让上一个指针指向该节点(如果是第一个结点则是头指针)        q=p;//q指针也指向p指针指向的结点    }    q->next=NULL;    return head;}//遍历void traverse(PNODE head){    PNODE q;    q=head->next;//注意不能写q=head,应该让q指向第一个元素    while(q!=NULL)    {        printf("%d ",q->a);        q=q->next;    }}//判断空链表void empty(PNODE head)//头指针{    if(head->next==NULL)    {        printf("空");    }    else    {        printf("不空");    }}//测试当前节点是不是链表末尾void islast(PNODE head){    if(head->next==NULL)    {        printf("是");    }    else    {        printf("不是");    }}//寻找一个数字在链表中的位置PNODE find(PNODE head,int s){    PNODE q;    int pos=1;//记录在链表的位置    q=head->next;    while(q!=NULL)    {        if(q->a==s)        {            printf("%d",pos);            break;        }        else        {            q=q->next;            pos++;        }    }    return q;//返回地址}//寻找一个数字的上一个地址PNODE find_(PNODE head,int s){    PNODE q=head->next;    while(q->next!=NULL && q->next->a!=s)    {        q=q->next;    }    return q;}//删除void del(PNODE head,int s)//不用返回指针{    PNODE q;    q=find_(head,s);    q->next=q->next->next;}//插入void insert(PNODE head,int s){    PNODE q=head;    PNODE pnew=(PNODE)malloc(sizeof(NODE));//创建一个新杰蒂娜    pnew->a=s;//把插入的数据存入新节点    pnew->next=q->next;//新节点指向下一个结点    q->next=pnew;//上一个节点指向新节点}int lengh(PNODE head)//求链表长度{    int i=0;    PNODE q=head->pnext;    while(q!=NULL)    {        i++;        q=q->pnext;    }    return i;}int main(){    PNODE head,q,p;    head=creat_();    traverse(head);    q=find_(head,4);//寻找4的前一个数字的位置    del(head,4);//删除4    p=head->next;    printf("%d",p->a);    insert(p,5);//插入一个数字    while(p!=NULL)    {        printf("%d ",p->a);        p=p->next;    }        return 0;}



#include <iostream>#include <stdlib.h>#include <stdbool.h>#include "normal.h"using namespace std;typedef struct node{    int num;    struct node* pnext;}lnode,*linklist;void init(linklist &head){    head=(linklist)malloc(sizeof(lnode));    head->pnext=NULL;}void create(linklist &head,int n){    linklist q,p;    q=head;    int i,data;    for(i=1;i<=n;i++)    {        cin>>data;        p=(linklist)malloc(sizeof(lnode));        p->num=data;        p->pnext=NULL;        q->pnext=p;        q=p;    }    q->pnext=NULL;}void traverse(linklist head){    linklist q=head->pnext;    while(q!=NULL)    {        cout<<q->num;        q=q->pnext;    }}bool empty(linklist head){    if(head->pnext==NULL)        return true;    else        return false;}linklist findelem(linklist head,int e){    linklist q=head->pnext;    while(q!=NULL && q->num!=e)    {        q=q->pnext;    }    return q;}int  locatelem(linklist head,int i,int &e){    int j=1;    linklist q=head->pnext;    for(j=1;j<i;j++)        q=q->pnext;    if(q==NULL)        return ERROR;    else        e=q->num;    return OK;}int insert(linklist &head,int i,int e){    int j=0;    linklist q=head,p;    while(j<i && q!=NULL)    {        q=q->pnext;        j++;    }    if(q==NULL)        return OVERFLOW;    p=(linklist)malloc(sizeof(lnode));    p->num=e;    p->pnext=q->pnext;    q->pnext=p;    return OK;}int delete_(linklist &head,int i){    int j=0;    linklist q=head,p;    while(j<i-1 && q!=NULL)    {        q=q->pnext;        j++;    }    if(q==NULL)        return OVERFLOW;    p=q->pnext;    free(p);    q->pnext=q->pnext->pnext;    return OK;    }int main(){    int t;    linklist head;    init(head);    create(head,10);    delete_(head,6);    traverse(head);}



0 0
原创粉丝点击