数据结构与算法(C语言描述)——单链表

来源:互联网 发布:免费的mac清理软件 编辑:程序博客网 时间:2024/04/29 23:13

/* 单链表的存储结构及基本运算 */
#include<stdio.h>
#include<stdlib.h>

#define OK 1  /* 函数结果状态代码 */
#define ERROR 0  /* 函数结果状态代码 */


typedef int Status;  /* 函数类型,其值是函数结果状态代码 */
typedef int ElemType; /* 顺序表的数据类型 */


/*构造节点*/
typedef struct LNode
{
 ElemType data;  /* 存数数据 */
 struct LNode* next; /* 指向下一个节点 */
 
}LNode;

typedef struct LNode* LinkList;  /*构造链表*/

/*查找元素*/
Status GetElem(LinkList L,int position,ElemType *e)
{
 int i = 1;
 LinkList p = L->next;
 while(p && i < position)
 {
  p = p->next;
  i++;
 }
 
 if(!p && i>position) /* 位置不合理 */
  return ERROR;
  
 *e = p->data; 
}

/*插入元素*/
Status ListInsert(LinkList *L,int position,ElemType e)
{
 int i = 1;
 LinkList p = *L,q,s;
 while(p && i < position)
 {
  p = p->next;
  i++;
 }
  
 if(!p || position<=0)
  return ERROR;
  
 s = (LinkList*)malloc(sizeof(LinkList));
 s->data = e;
 s->next = p->next;
 p->next = s;
 
}

/* 删除元素 */
Status ListDelete(LinkList *L,int position,ElemType *e)
{
 int i=1;
 LinkList p = *L;
 while(p && i < position)
 {
  p = p->next;
  i++;
 }
  
 if(!p || position<=0)
  return ERROR;
  
 (*e) = p->next->data;
 p->next = p->next->next; 
}

/*头插法创建链表*/
void CreateListHead(LinkList *L)
{
 ElemType e;
 LinkList p;
 (*L) = (LinkList)malloc(sizeof(LNode));
 (*L) ->next = NULL;
 
 while(scanf("%d",&e)!=EOF)
 {
  p = (LinkList)malloc(sizeof(LNode));
  p->data = e;
  p->next = (*L)->next;
  (*L)->next = p; 
 }
}

void CreateListTail(LinkList *L)
{
 ElemType e;
 LinkList p,q;
 (*L) = (LinkList)malloc(sizeof(LNode));
 p = *L;
 
 while(scanf("%d",&e)!=EOF)
 {
  q = (LinkList)malloc(sizeof(LNode));
  q->data = e;
  q->next = NULL;
  p->next = q;
  p = q;
 }
}

/*单链表就地逆置*/
void ListReverse(LinkList *L)
{
 LinkList p = (*L)->next;
 LinkList q = p->next;
 p->next = NULL;
 p=q;
 while(p)
 {
  q = q->next;
  p->next = (*L)->next;
  (*L)->next = p;
  p = q;
 }
}

/*打印链表*/
void ListDisplay(LinkList L)
{
 int i=1;
 LinkList p = L->next;
 while(p)
 {
  printf("第%d个元素:%d\n",i,p->data);
  i++;
  p = p->next;
 }
}

0 0
原创粉丝点击