• 数据结构【清华严蔚敏】——单链表的基本运算


        单链表的基本运算如下:
      (1)初始化单链表head
      (2)依次采用尾插法插入a,b,c,d,e元素
      (3)输出单链表head:a b c d e
      (4)单链表head长度:5
      (5)单链表head为非空
      (6)单链表head的第3个元素:c
      (7)元素a的位置:1
      (8)在第4个元素位置上插入f元素
      (9)输出单链表head:a b c f d e
      (10)删除head的第3个元素
      (11)输出单链表head:a b f d e
      (12)释放单链表head
     

    #include <stdio.h>
    #include <stdlib.h>
    #define OK 1;
    
    typedef char elemtype;
    typedef int Status ;
    typedef struct LNode {
    	elemtype data;
    	struct LNode *next;
    
    } LNode,*LinkList;
    
    //初始化链表
    Status InitList(LinkList &L)
    {
    	L=(LinkList)malloc(sizeof(LNode));
    	if(!L)  return -1;//分配空间失败
    	L->next=NULL;
    	return OK;
    }
    
    //算法2.9  插入
    Status ListInsert_L(LinkList &L,int i,int e)
    {
    	LinkList p=L,q;
    	int j=0;
    	while(p&&j<i-1) { //找到插入位置在前一个指针
    		p=p->next;
    		j++;
    	}
    	if(!p||j>i-1) return -1;//i值不合法,if(!p||i<1)
    	q=(LinkList)malloc(sizeof(LNode));
    	q->data=e;
    	q->next=p->next;
    	p->next=q;
    }
    
    //algorithm2.10 删除
    Status ListDelete_L(LinkList &L,int i)
    {
    	LinkList p=L,q;
    	int j=0;
    	while(p&&j<i-1) {
    		p=p->next;
    		j++;
    	}
    	if(!p->next||j>i-1)
    		return -1;//i值不合法
    	q=p->next;
    	p->next=p->next->next;
    	free(q);
    }
    
    Status DestroyList_L(LinkList&L)
    {
    	LinkList p=L;
    	if(L) {
    		p=L->next;
    		free(L);
    		L=p;
    	}
    	return OK;
    }
    
    Status ListEmpty(LinkList &L)
    {
    	if(L->next)
    		return 1;
    	else
    		return 0;
    }
    
    Status Listprint(LinkList &L)
    {
    	LinkList p=L->next;
    	while(p) {
    		printf("%c ",p->data);
    		p=p->next;
    	}
    }
    
    int main()
    {
    	LinkList head;
    	InitList(head);
    	char A[5] = {'a','b','c','d','e'},temp='f';
    	//temp用来存放插入的字符
    	int	i;
    
    	for(i=1; i<=5; i++)
    		ListInsert_L(head,i,A[i-1]);
    
    	if(!ListEmpty(head))
    		printf("链表非空
    ");
    
    	printf("开始时元素序列为:
    ");
    	Listprint(head)	;
    
    	i=4;
    	ListInsert_L(head,i,temp);
    	printf("
    插入后的元素序列为:
    ");
    	Listprint(head);
    
    	i=3;
    	ListDelete_L(head,i) ;
    	printf("
    删除后的元素序列为:
    ");
    	Listprint(head);
    
    	if(DestroyList_L(head))
    		printf("
    成功释放链表");
    
    	getchar();
    
    }
  • 相关阅读:
    Oracle Relink RAC Binary Options 说明
    Oracle 10g 对象 默认 ITL 数量 测试
    Oracle 相关的专业术语 说明
    Oracle 11g 新特性 自适应游标共享(Adaptive Cursor Sharing: ACS) 说明
    symbian 学习笔记(1) 基础
    symbian 学习笔记(3) 手机独有
    计算机体系结构几个常用的知识点记录
    数据结构和算法笔记(3)
    windows mobile 通用曾抽象
    一些简单常用算法整理学习
  • 原文地址:https://www.cnblogs.com/vivid-victory/p/10090481.html
Copyright © 2020-2023  润新知