C语言数据结构单链表基本操作

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Lnode
{
    int data;
    struct Lnode *next;
}Lnode,*Linklist;
int InitList(Linklist &L)
{
    L = new Lnode;
    L ->next=NULL;
    return 0;
}
//倒序存储
Linklist Create(Linklist &L)
{
    //L= new Lnode;
    //L->next=NULL;
    InitList(L);
    Linklist s;
    int a,n;

    printf("请输入要存储的元素个数:");
    scanf("%d",&a);
    int i=1;
    printf("请输入元素:");
    while(i<=a)
    {
        s=new Lnode;
        scanf("%d",&n);
        s->data=n;
        s->next=L->next;
        L->next=s;
        i++;
    }
    return L;
}

//顺序存储
Linklist Create1(Linklist &L)
{
    InitList(L);
    Linklist r,p;
    printf("请输入数据(按空格继续输入按回车结束输入!):");
    r=L;
    int n=0;
    char i;
    do
    {
        p=new Lnode;
        scanf("%d",&p->data);
        p->next=NULL;
        r->next=p;
        r=p;
        n++;
    }
   while((i=getchar())!='\n');
    return L;
}
//插入函数
Linklist ListInsert(int i ,Linklist &L,int num)
{
    int  flag=1;
    while(flag)
    {
        Linklist p,s;
    p=L;
    printf("请输入新元素要插入的位置:");
    scanf("%d",&i);
    int j=0;
    while(p&&(j<i-1))//找到第i-1个元素
    {
        p=p->next;
        j++;
    }
    s = new Lnode;
    printf("请输入新元素:");
    scanf("%d",&num);
    s->data = num;
    s->next = p->next;
    p->next = s;

    printf("是否继续插入新元素?1(是)/0(否)\n");
    scanf("%d",&flag);


    }return L;

}
//单链表的删除
Linklist ListDelete(int i,Linklist &L)
{
    Linklist p,q;
    int j=0;
    p=L;
    printf("请输入要删除的元素位置:");
    scanf("%d",&i);
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    q = p->next;
    p->next = q->next;
    delete q;
}
//单链表的按值查找
Linklist ListSearch(int i,Linklist &L)
{
    Linklist p;
    p=L;
    int j=0;
    printf("请输入需要查找的值:");
    scanf("%d",&i);
    while(p->data!=i)
    {
        p=p->next;
        j++;
    }
    printf("查找的值是第%d位:%d\n",j,i);
    return L;
}

void menu()
{
    printf("\t\t\t\t----------------欢迎来到单链表信息存储系统-------------------\n");
    printf("\t\t\t\t----------------1.顺序存储创建单链表-------------------------\n");
    printf("\t\t\t\t----------------2.倒序存储创建单链表-------------------------\n");
    printf("\t\t\t\t----------------3.插入新元素---------------------------------\n");
    printf("\t\t\t\t----------------4.删除元素-----------------------------------\n");
    printf("\t\t\t\t----------------5.按值查找元素-------------------------------\n");
    printf("\t\t\t\t----------------6.输出单链表的所有元素值---------------------\n");
    printf("\t\t\t\t----------------7.在此显示功能菜单---------------------------\n");
    printf("\t\t\t\t----------------8.退出---------------------------------------\n");
}







void printLinkList(Linklist LL)
{
    Lnode* s=LL->next;
    int i=1;
    printf("单链表存储的所有元素:");
    do
    {
        printf("%d ",s->data);
        s=s->next;
        i++;
    }while(s);
    printf("\n\n\n");
}


int main()
{
    Linklist L;
    int i,num;
    int choice;
    menu();
    while(1)
    {
        printf("请选择功能序号:");
        scanf("%d",&choice);
        if(choice==8)
            break;
        switch(choice)
        {
        case 1:
            Create1(L);
            break;
        case 2:
            Create(L);
            break;
        case 3:
            ListInsert(i,L,num);
            break;
        case 4:
            ListDelete(i,L);
            break;
        case 5:
            ListSearch(i,L);
            break;
        case 6:
            printLinkList(L);
            break;
        case 7:
            menu();
            break;

        default: printf("输入有误!!!!\n");
        }




    }


    return 0;
}

















以上的代码是数据结构中C语言单链表的基本操作,拿来练练手的难免有些逻辑上的错误,有很多地方没有考虑周到,仅供大家参考!!

发布了23 篇原创文章 · 获赞 21 · 访问量 5175

猜你喜欢

转载自blog.csdn.net/LTtiandd/article/details/104103545