数据结构的C实现_单向链表

原创 2012年03月22日 18:24:35
//L为头结点的单链表
#include <stdio.h>
#include <stdlib.h>
#define	OK 1
#define ERROR 0
typedef int elemType;//元素类型

//定义结点
typedef struct _LNode
{
	elemType data;
	struct _LNode *Next;
}LNode;

//尾插建立链表
void CreatList2(LNode *L,elemType e)
{
    LNode *s=(LNode*)malloc(sizeof(LNode));
    s->data=e;
    s->Next=NULL;
    LNode *p=L;
    while(p->Next!=NULL)
    {
        p=p->Next;
    }
    p->Next=s;
}

//遍历单链表
void TraverseList(LNode *L)
{
	LNode *p;
	p=L->Next;
	//printf("线性表La=");
	while(p)
	{
		printf("%d ",p->data);
		p=p->Next;
	}
	printf("\n");
}

//在第pos个位置前插入元素e
int ListInsert(LNode *L,int pos,elemType e)
{


	LNode *p;
	LNode *s=(LNode *)malloc(sizeof(LNode));
	int j=0;
	p=L;
	//printf("在第%d个位置前插入元素%d\n",pos,e);
	while(p&&j<pos-1)
	{
		p=p->Next;
		++j;
	}
	if(!p||j>pos-1) return ERROR;

	s->data=e;
	s->Next=p->Next;
	p->Next=s;
	return OK;
}

//删除第pos个位置上的元素,并返回其值
int ListDelete(LNode *L,int pos)
{
	LNode *p=L;
	LNode *q;
	int j=0;
	while(p->Next&&j<pos-1)
	{
		p=p->Next;
		++j;
	}
	if(j>pos-1||!p->Next)
		return ERROR;
	q=p->Next;
	p->Next=q->Next;
	//printf("删除的元素是:%d\n",q->data);
	free(q);
	return OK;
}

//查找函数
int ListSearch(LNode *L,elemType e)
{
    LNode *p=L->Next;
    int cursor=1;
    while(p->Next!=NULL)
    {
        if(p->data==e)
        {
            printf("找到,%d在第%d个位置\n",e,cursor);
            return cursor;
        }
        p=p->Next;cursor++;
    }//while
    printf("没找到\n");
}

//逆置单向链表
LNode *ListInverse(LNode *L)
{
    if(L==NULL)
    return NULL;
    if(L->Next==NULL) return L;
    LNode *pre=L->Next;
    LNode *cur=pre->Next;
    LNode *next=cur->Next;
    pre->Next=NULL;
    cur->Next=pre;
    pre=cur;
    cur=next;
    while(cur!=NULL)
    {
        next=cur->Next;
        cur->Next=pre;
        pre=cur;
        cur=next;
    }
    L->Next=pre;
    return L;
}

//单链表合并
LNode *MergeList(LNode *La,LNode *Lb,LNode *Lc)
{
    LNode *pa=La->Next;LNode *pb=Lb->Next;LNode *pc;
    Lc=pc=La;

    while(pa&&pb)
    {
        if(pa->data<=pb->data)
        {
            //printf("wrong1\n");
            pc->Next=pa;pc=pa;pa=pa->Next;
        }
        else
        {
            //printf("wrong2\n");
            pc->Next=pb;pc=pb;pb=pb->Next;
        }

    }//while
    pc->Next=pa?pa:pb;
    //printf("wrong3\n");
    free(Lb);
    return La;
}

int main()
{
    LNode *list1=(LNode*)malloc(sizeof(LNode));
    list1->Next=NULL;
    int nums;elemType x;
    scanf("%d",&nums);
    int i;
    for(i=0;i<nums;i++)
    {
        scanf("%d",&x);
        CreatList2(list1,x);
    }
    printf("创建好的线性表La=");
    TraverseList(list1);
    int pos;
    scanf("%d%d",&x,&pos);
    ListInsert(list1,pos,x);
    printf("插入一个元素后的线性表La=");
    TraverseList(list1);
    scanf("%d",&pos);
    ListDelete(list1,pos);
    printf("删除一个元素后的线性表La=");
    TraverseList(list1);
    scanf("%d",&x);
    ListSearch(list1,x);
    list1=ListInverse(list1);
    printf("逆置后的线性表La=");
    TraverseList(list1);
    LNode *list2=(LNode*)malloc(sizeof(LNode));
    list2->Next=NULL;
    scanf("%d",&nums);
    for(i=0;i<nums;i++)
    {
        scanf("%d",&x);
        CreatList2(list2,x);
    }
//    printf("线性表Lb=");
//    TraverseList(list2);

    LNode *list3;
    MergeList(list1,list2,list3);
    printf("合并La和Lb后的线性表=");
    TraverseList(list1);
    return 0;
}


【数据结构】C语言实现顺序链表

这是在上数据结构课程时候的练习,贴出来做备忘。 #include #include #include #include #include typedef int elemtype; ...
  • lchad
  • lchad
  • 2014年12月24日 22:51
  • 1669

数据结构算法代码实现——线性表的链式表示与实现(单链表)(三 )

线性表的链式表示 使用一组任意的存储单元存储线性表的数据元素(这些存储单元可以是连续也可以是不连续的)。 常见的链式表:单链表、静态链表、循环链表、双向链表。 链表的存储方式和特点我们修...
  • hou1620089770
  • hou1620089770
  • 2015年06月02日 08:03
  • 2815

数据结构—单链表的实现

关于单链表,是最熟悉不过的一种数据结构了。今天,花费了很长的时间写出了单链表,和大家分享一下,有问题大家可以提出来!!!linklist.h#define _CRT_SECURE_NO_WARNING...
  • qq_26768741
  • qq_26768741
  • 2016年06月04日 15:37
  • 2413

数据结构和算法C++语言实现:链表的实现

链表使用面向对象的方法实现,C++
  • QQrenzai
  • QQrenzai
  • 2016年06月15日 17:37
  • 486

链表的理解与实现[数据结构]

一、链表的定义n个节点离散分配,节点之间通过指针相连。除了首节点和尾节点之外,每个节点都只有一个前驱结点和一个后继节点。 如下图: 大家有没有发现,链表的结构很像一种交通工具,什么呢? 火车...
  • u011509781
  • u011509781
  • 2016年01月27日 14:02
  • 1891

数据结构c语言实现-链表(带和不带头节点)

数据结构与算法分析——c语言描述 第3章   第二节   表 1.带头结点(原书)   稍微改造一下 #include #include struct N...
  • Richard1997
  • Richard1997
  • 2017年03月06日 17:13
  • 531

数据结构之单链表基本功能的实现

单链表的创建,尾插,头插,逆置,删除,销毁等功能
  • WRNGT
  • WRNGT
  • 2017年02月28日 16:42
  • 570

数据结构单链表最全的实现代码

  • 2009年12月04日 18:08
  • 9KB
  • 下载

数据结构--单链表的基本操作(C语言实现)

数据结构--单链表的基本操作(C语言实现)     #include #include #define ERROR 0 #define OK   1...
  • qq_33609401
  • qq_33609401
  • 2016年09月27日 17:30
  • 1200

c语言实现数据结构中的链表源代码

#include #include typedef struct LNode *List; struct LNode { int data; List next; }; struct LNo...
  • u014574317
  • u014574317
  • 2017年03月23日 09:56
  • 508
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构的C实现_单向链表
举报原因:
原因补充:

(最多只允许输入30个字)