分类
笔记

C语言数据结构上机实验-链表 源代码

已经过整理与测试,代码如下:

#include<stdio.h>
#include<malloc.h>
#include<stdib.h>
typedef int datatype;
typedef struct node {
    datatype data;
    struct node*next;
}slnode;
int l;
int initiate(slnode**h;);
int append(slnode*h);
int insert(slnode*h,int n);
int delete(slnode*h,int n);
slnode*search(slnode*h,datatype x);
void print(slnode*h);

void main() {
    slnode*h,*s;
    int sel,n,x;
    initiate(&h);
    printf("请输入你的选择:1--initiate 2--append 3--insert 4--delete 5--search 6--print 7--exit\nyour choice=");
    scanf("%d",&sel);
    while(sel!=7) {
        if(sel==1) {
            initiate(&h);

        }
        else if(sel==2) {
            append(h);
            print(h);
        }
    else if(sel==3) {
        printf("请输入待输入的结合点个数");
        scanf("%d,&n");
        insert(h,n);
        print(h);

    }
    else if(sel==4) {
        printf("请输入待删除的结点个数");
        scanf(%d,&n);
        delete(h,n);
        print(h);
    }
    else if(sel==5) {
        printf("请输入要查找的结点数据:");
        scanf("%d",&x);
        s=search(h,x);
        if(s!=NULL)
            printf("查找成功,结点位置为:%d\n",l);

    }
    else if(sel==6) {
        print(h);

    }
    else
        printf("你的选择是错误的!\n");
    printf("请输入你的选择:1--intiate 2--append 3--insert 4--delete 5--search 6--print 7--exit\nyour choice=");
    scanf("%d",&sel);

}
int initiate(slnode**h) {
    *h=(slnode*)malloc(sizeof(slnode));
    if=(*h==NULL) {
        printf("初始化失败!\n");
        return 0;
    }
    (*h)->next=NULL;
    printf("完成初始化!\n");
    return 1;

}
int append (slnode*h) {
    slnode *p,*q;
    int n,i;
    datatype a[10];
    if(h==NULL) {
        printf("单链表未初始化");
        return 0;
    }
    printf("请出入单链表最初的结点shun=");
    scanf("%d",&n);
    printf("请输入各个结点数据域的值:");
    for(i=0;i<n;i++) {
        scanf("%d",&a[i]);
    }
    p=h;
    for((q=slnode*)malloc(sizof(slnode)))==NULL) {
        printf("新结点空间申请失败!"\n);
        return 0;
    }
    q->data=a[i];
    q->next=NULL;
    p->next=q;
    p=q;
    return 1;
}


/*删除*/
int delete(slnode*h,int n) {
    slnode*p,*s;
    int m;
    datatype x;
    p=h;
    m=n;
    while(n) {
        printf("请输入第%d个被删除结点的数据:",m-n+1);
        scanf("%d",&x);
        s=search(h,x);
        if(s==NULL)
            continue;
        p=s->next;
        s->next=p->next;
        free(p);
        n--;
    }
    return 1;
}

/*查找*/
slnode*search(slode*h,datatype x) {
    slnode *p;
    p=h;
    L=0;
    while (p->next!=NULL) {
        l++;
        if(p->next!=NULL) {
            L++;
            if(p->next->data==x)
                return p;
            p=p->next;
        }
        printf("没有要删除的结点数据!\n");
        return NULL;
    }
}

/*显示输出*/
void print(slnode*h){
    slnode*p;
    int i;
    p=h->next;
    i=0;
    printf("\n当前的单链表数据内容为:");
    while(p!=NULL)
    {
        i==;
        printf("第%d个数据:%d\n",i,p->data);
        p=p->next;
    }
    printf("\n线性表的表长为%d\n",j)
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注