单链表的操作

来源:互联网 发布:南方大数据100指数评论 编辑:程序博客网 时间:2024/06/02 01:40
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef int ElemType;  //定义数据类型typedef struct node{    ElemType data;   //数据域    struct node * next; //指针域}slink;  //单链表类型名slink *creslink(int n) //创建带头结点的单链表{    slink *head,*p,*s;//创建头结点    int i;    p=head=(slink *)malloc(sizeof (slink));    for(i=1;i<=n;i++)    {        s=(slink *)malloc(sizeof(slink));//申请空间        scanf("%d",&s->data);        p->next=s;        p=s;    }    p->next=NULL;  //尾结点的指针一定要置空    return head;}int getlen(slink *head) //获取表长{    slink * p;    int n=0;    p=head->next;    while(p!=NULL)    {        n++;        p=p->next;    }    return n;}int getelem(slink *head,int i,ElemType * e)//取元素操作{    slink *p;    int j;    if(i<1) //参数1,不合法,返回0    return 0;    p=head->next;    j=1;    while(p!=NULL&&j<i)  //从第1个头结点开始查找    {        p=p->next;        j++;    }    if(p==NULL)    return 0;    * e=p->data;    return 1;}slink * locate(slink * head,ElemType x) //定位操作{    int i;    slink *p;    p=head->next;    i=1;    while(p!=NULL&&p->data!=x)    {        p=p->next;        i++;    }    return p;}int delete(slink * head,int x) //删除操作{    slink *p,*q;    p=head;    while(p->next!=NULL&&x!=p->next->data)   {    p=p->next;   }   if(p->next==NULL)    return 0;   q=p->next; //q指向第i个结点   p->next=q->next; //p的指针与指向结点q指向结点的下一个结点,删除第i个结点   free(q);   return 1;}int insert(slink * head,int i,ElemType x){    slink *p,*q;    int j;    if(i<1)    return 0;    p=head;    j=0;    while(p!=NULL&&j<i-1)    {        p=p->next;        j++;    }    if(p==NULL)        return 0;    q=(slink *)malloc(sizeof(slink));    q->data=x;    q->next=p->next;    p->next=q;    return 1;}void Print(slink *head)  //打印单链表{    slink *p;    p=head->next;    while(p!=NULL)    {        printf("%4d",p->data);        p=p->next;    }    printf("\n");}int main(){    slink *head;    ElemType *e;    head=creslink(10);    Print(head);    delete(head,4);    Print(head);    return 0;}

2 0
原创粉丝点击