标题:放一个程度源码出来供大家参考;数据结构-单链表
只看楼主
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
结帖率:100%
 问题点数:0 回复次数:0 
放一个程度源码出来供大家参考;数据结构-单链表
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define N 100
#define OK 1
#define Error 0
int yes=0;
typedef char elemtype;
typedef struct lnode
{
    char data;
    struct lnode *next;
}lnode,*linklist;
void createlist(linklist *l)
{
    int i,n;
    linklist p;
    char ch;
    printf("请输入单链表的长度:\n");
    scanf("%d",&n);
    *l=(linklist)malloc(sizeof(lnode));
    (*l)->next=NULL;
    printf("请输入单链表中元素:\n");
    for(i=n;i>0;i--)
    {
        p=(linklist)malloc(sizeof(lnode));
        scanf("%c",&ch);
        if((ch=getchar())!='\n')
        {
            p->data=ch;
            p->next=(*l)->next;
            (*l)->next=p;
        }
    }
    yes=1;
}
int length(linklist *l)
{
    int i=0;
    linklist p;
    p=(*l)->next;
    while(p!=NULL)
    {
        i++;
        p=p->next;
    }
    return i;
}
display(linklist *l)
{
    linklist q;
    int i;
    printf("此时单链表元素:\n");
    for(i=1;i<=length(l);i++)
    {
        printf("%3d",i);
    }
    printf("\n");
    q=(*l)->next;
    while(q)
    {
        printf("%3c",q->data);
        q=q->next;
    }
    printf("\n");
}
listdelete(linklist l,int i,char*e)
{
    linklist p=l,q;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i-1)
        return -1;
    q=p->next;
    *e=q->data;
    free(q);
    return *e;
}
int listinsert(linklist l,int i,char e)
{
    linklist p=l,s;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i-1)
        return -1;
    s=(linklist)malloc(sizeof(lnode));
    s->data=e;
    s->next=p->next;
    p->next=p->next;
    p->next=s;
    return OK;
}
destroylist(linklist l)
{
    linklist p=l,q=l->next;
    while(q)
    {
        free(p);
        p=q;
        q=q->next;
    }
    free(q);
    yes;
}
listempty(linklist l)
{
    return (l->next==NULL);
}
void menu()
{
    printf("                 单链表基本操作实验                   \n");
    printf("******************************************************\n");
    printf("请选择命令序号(0-7):                                 *\n");
    printf("*1创建链表;                                   *\n");
    printf("*2链表插入;                                          *\n");
    printf("*3链表删除;                                          *\n");
    printf("*4求链表长度;                                        *\n");
    printf("*5判断链表是否为空;                                  *\n");
    printf("*6链表输出;                                          *\n");
    printf("*7单链表销毁;                                        *\n");
    printf("*0程序结束.                                          *\n");
    printf("******************************************************\n");
}
void function()
{
    linklist l;
    int i,sel;
    char ch,e;
    while(l)
    {
        menu();
        printf("请输入命令号(0-7):\n");
        scanf("%d",&sel);
        switch(sel)

        {
            case 1:
                {
                    createlist(&l);
                    printf("单链表创建成功!\n");
                    break;
                }
            case 2:if(yes==0)
                   {
                       printf("此时表未创建!不能插入元素!\n");
                       break;
                   }
                else
                {
                    printf("请输入要插入的位置:\n");
                    scanf("%d",&i);
                    printf("请输入要插入的值:\n");
                    scanf("%c",&e);
                    if((e=getchar())!='\n')
                        listinsert(l,i,e);
                    break;
                }
            case 3:if(yes==0)
                   {
                       printf("此时表未创建!不能删除元素!\n");
                       break;
                   }
                else
                {
                    printf("请输入要删除位置:\n");
                    scanf("%d",&i);
                    listdelete(l,i,&ch);
                    break;
                }
            case 4:if(yes==0)
                   {
                       printf("此时表未创建!不能求单链表长度!\n");
                       break;
                   }
                else
                {
                    printf("单链表的长度是%d\n",length(&l));
                    break;
                }
            case 5:if(yes==0)
                   {
                       printf("此时表未创建!\n");
                       break;
                   }
                else if(listempty(l))
                    printf("当前的单链表是空表!\n");
                else
                    printf("当前单链表为非空表!\n");
                break;
            case 6:if(yes==0)
                   {
                       printf("此时表未创建!不能输出线性表!\n");
                       break;
                   }
                else
                {
                    display(&l);
                    break;
                }
            case 7:if(yes==0)
                   {
                       printf("此时表未创建!不能销毁单链表!\n");
                       break;
                   }
                else
                {
                    destroylist(l);
                    printf("单链表已被销毁!\n");
                    break;
                }
            case 0:exit(1);break;
            default:
                printf("输入命令错误!请重新输入:\n");
                break;
        }
    }
}
int main(void)
{
    function();
    return OK;
}


搜索更多相关主题的帖子: next 元素 include 
2012-10-28 23:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-384783-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014797 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved