当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

C语言实现的单链表代码

发表于: 2011-03-04   作者:bsr1983   来源:转载   浏览次数:
摘要:     数据结构上级考试练习代码,置于此以备后用!         #include<stdio.h> //定义链表中要存储的数据类型 typedef char DataType; //定义链表元素的数据结构 typedef struct linknode { Dat

    数据结构上级考试练习代码,置于此以备后用!

   

   

#include<stdio.h>
//定义链表中要存储的数据类型
typedef char DataType;
//定义链表元素的数据结构
typedef struct linknode
{
    DataType data;//节点的据域
    struct linknode *next;
}linknode;
//头插入法建立单链表
linknode* CreateListF(void)
{
   char ch;
   linknode *head;
   linknode *s;
   head=NULL;
   ch=getchar();
   while(ch!='\n')
   {
       s=(linknode*)malloc(sizeof(linknode));
       s->data=ch;
       s->next=head;
       head=s;
       ch=getchar();
   }
   return head;
}
//尾插入法建立单链表
void CreateListR(linknode *head)
{
    //声明尾指针及工作指针
    linknode *r,*s;
    char ch;
    ch=getchar();
    r=head;
    while(ch!='\n')
    {
        s=(linknode*)malloc(sizeof(linknode));
        s->data=ch;
        r->next=s;
        r=s;
        ch=getchar();
    }
    r->next=NULL;
}
//获取链表长度
int getLength(linknode* head)
{
    int length=0;
    linknode *s;
    s=head->next ;
    while(s!=NULL)
    {
        s=s->next;
        ++length;
    }
    return length;
}
//获取指定位置的链表元素
linknode* getNode(linknode *head,int i)
{
    int listLength=0;
    int j=1;
    linknode *s;
    listLength=getLength(head);
    if(i<1||i>listLength)
    {
        printf("i value is error! \n");
        return NULL;
    }
    else
    {
        s=head->next ;
        while(s!=NULL)
        {
            if(i==j)
            {
                return s;
            }
            else
            {
                s=s->next;
                j++;
            }
        }
        return NULL;
    }
}
//在指定的位置插入一个元素
void insertList(linknode* head,DataType x,int i)
{
    linknode *s,*p;
    p=getNode(head,i-1);
    if(p==NULL)
    {
        printf("the position is Error!\n");
    }
    else
    {
        s=(linknode*)malloc(sizeof(linknode));
        s->data=x;
        s->next=p->next;
        p->next=s;
    }
}
//删除指定位置元素
void deleteList(linknode *head,int i)
{
    linknode *p,*s;
    p=getNode(head,i-1);
    if(p==NULL||p->next==NULL)
    {
        printf("the position is Error!\n");
    }
    else
    {
        s=p->next;;
        p->next=s->next;
        free(s);
    }
}
//打印链表中的所有元素
void printLinkList(linknode* L)
{
    linknode *nextNode;
    nextNode=L;
    do
    {
        nextNode=nextNode->next;
        printf("%c \n",nextNode->data);
    }
    while(nextNode->next!=NULL);
}
int main()
{
    linknode *flist,*rlist,*find;
    int index; char value;
    rlist=(linknode*)malloc(sizeof(linknode));
    rlist->next=NULL;
    printf("plase input a sting,end with the KEY_Enter \n");
    //flist=CreateListF();
    //printLinkList(flist);
    CreateListR(rlist);
    printLinkList(rlist);
    printf("list length=%d \n",getLength(rlist));
    printf("set insert node:index,value:");
    scanf("%d,%c",&index,&value);
    printf("insert a element!");
    insertList(rlist,value,index);
    printLinkList(rlist);
    printf("list length=%d \n",getLength(rlist));
    printf("set delete node index:");
    scanf("%d",&index);
    deleteList(rlist,index);
   	printf("delete a element!");
    printLinkList(rlist);
    printf("list length=%d \n",getLength(rlist));
    printf("set visit node index:");
    scanf("%d",&index);
    find=getNode(rlist,index);
    if(find!=NULL)
    {
        printf("this node value=%c \n",find->data);
    }
}

 

 

C语言实现的单链表代码

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
单链表的逆置是一个非常经典的问题,这里利用两个思想进行解决。 首先,我们需要看下原理图,其实两
C语言创建单链表-入门部分的代码存在一系列问题,现在在其基础上写了第二版,改进了入门部分代码的问
顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻)。但是也有不
1.程序的大致结构如下图: 2.下面依次列出各个类的代码 ①ILISTDs.cs 这是一个接口类,列出单链表的
C#开发EyeLink眼动仪的实验程序 【题外话】 Eyelink眼动仪是SR Research推出的一款眼动仪,很多高校
概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列。本章先介绍线性
前提:链表结点结构体: typedef struct node { ElemType data; node *next; }Node; 1、最初设想:
采用模板类实现的好处是,不用拘泥于特定的数据类型。就像活字印刷术,制定好模板,就可以批量印刷
  最近被问到链表,是一个朋友和我讨论Java的时候说的。说实话,我学习编程的近一年时间里,学到
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> struct Node{ struct No
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号