【数据结构】链式线性表的几种常用用法

#include <stdio.h>
#include <stdlib.h>

#define maxsize 1024
#define OK 1
#define ERROR 0

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode;

//声明函数
void out_l(LNode *l);    //输出线性表
LNode *create_l();        //创建线性表
void insert_l(LNode *l);    //插入元素
void delete_l(LNode *l);        //删除元素
int search_l(LNode *l);            //按值查找元素


void main()
{
    int i;
    LNode *l;
    l = create_l();        //创建链式链表
    out_l(l);            //输出链表
    //insert_l(l);        //插入元素
    //out_l(l);            //输出链表
    //delete_l(l);    //删除元素    
    //out_l(l);            //输出链表
    i = search_l(l);    //按值查找元素的位置
    if(i == -1)
    {
        printf("输入的元素不存在!");
    }
    else
    {
        printf("元素的位置为:%d",i);
    }
}

//按值查找元素
int search_l(LNode *l)
{
    int x,i,j;
    LNode *h,*p;
    i = 0;
    printf("请输入查找的元素:");
    scanf("%d",&x);
    h = l;
    while(h != NULL && h->data != x)
    {
        h = h->next;
        i++;
    }
    if(h != NULL) return(i);
    else return(-1);
}

//删除元素
void delete_l(LNode *l)
{
    int i,j;
    LNode *p,*h;
    j=0;        //j=0必须放在LNode *p,*h;语句的后面,如果放到前面会报错,不知道是什么原因    
    printf("请输入删除元素的位置:");
    scanf("%d",&i);
    h = l;
    while(h != NULL && j < i - 1)
    {
        h = h->next;
        j++;
    }
    if(h == NULL || j > i - 1)
    {
        printf("输入的位置有问题!");
    }
    else
    {
        h->next = h->next->next;
    }

}

//插入元素
void insert_l(LNode *l)
{
    int i,j,x;
    LNode *p,*h;
    j = 0;
    h = l;
    printf("请输入插入的位置:\n");
    scanf("%d",&i);
    printf("请输入插入的元素:\n");
    scanf("%d",&x);
    while(h != NULL && j < i - 1)
    {
        h = h->next;
        j++;
    }
    if(h == NULL || j > i -1)
    {
        printf("输入的位置有误!");
    }
    else
    {
        p = (LNode *)malloc(sizeof(LNode));
        p->data = x;
        p->next = h->next;
        h->next = p;
    }
    
}

//创建链式线性表
LNode *create_l()        //返回的是指针类型的所以要用到*
{
    LNode *h,*p,*l,*w;
    int x;
    h = (LNode *)malloc(sizeof(LNode));
    h->next = NULL;
    p = h;
    printf("请输入创建的值:");
    scanf("%d",&x);
    while(x != -222)
    {
        l = (LNode *)malloc(sizeof(LNode));
        l->data = x;
        l->next = NULL;
        p->next = l;
        p = l;
        printf("输入-222结束,其他则继续创建线性表;");
        scanf("%d",&x);
    }
    return(h);
}

//输出链式线性表的值
void out_l(LNode *l)
{
    LNode *p;
    p = l;
    p = p->next;        //由于第一个节点是头结点不存数据时空的,所以要指向下一个节点才会有数据
    while(p != NULL)
    {
        printf("%5d",p->data);
        p = p->next;
    }
}

直接贴代码了,没什么技术含量;

posted @ 2012-09-22 00:32  net小伙  阅读(606)  评论(0编辑  收藏  举报