zoukankan      html  css  js  c++  java
  • 线性表的单链表的定义、初始化等操作

    #include <stdio.h>
    #include <stdlib.h>
    #define OK 1
    #define ERR 0
    #define MAXSIZE 100
    typedef int ElemType;
    
    //定义
    typedef struct Node
    {
    	ElemType data;
    	struct Node *next;
    }Node,*LinkedList;
    
    //初始化
    LinkedList LinkedListInit()
    {
    	Node *L;
    	L = (Node * )malloc(sizeof(Node));
    	if (L==NULL)
    	{
    		printf("申请内存空间失败.");
    	}
    	L->next=NULL;
    	return L; 
    }
    
    //单链表的建立1,头插入法建立单链表
    LinkedList LinkedListCreateHead()
    {
    	Node *Head;
    	Head = (Node *)malloc(sizeof(Node));//申请头节点空间
    	Head->next=NULL;
    	ElemType x;//x为链表数据域中的数据
    	while (scanf("%d",&x)!=EOF)
    	{
    		Node *P;
    		P=(Node *)malloc(sizeof(Node));
    		
    		P->data=x;
    
    		P->next=Head->next;
    		
    		Head->next=P;
    	
    	}
    	return Head;
    }
    
    //单链表的建立2,尾插入法建立单链表
    LinkedList LinkedListCreateTail()
    {
    	//申请头节点
    	Node *Head;
    	Head = (Node*)malloc(sizeof(Node));
    	Head->next=NULL;
    
    	//定义Tail始终指向终端结点,开始时指向头结点 
    	Node *Tail;
    	Tail=Head;
    
    	ElemType x;
    	while (scanf("%d",&x)!=EOF)
    	{
    		Node *P = (Node *)malloc(sizeof(Node));//申请新的结点
    		
    		P->data=x;
    		Tail->next=P;
    		Tail=P;
    	}
    	Tail->next=NULL;
    	return Head;
    	
    }
    //单链表的插入,在链表的第i个位置插入x的元素
    LinkedList LinkedListInsert(LinkedList L,int i,ElemType x)
    {
    	Node *pre;
    	pre = L;
    	int temp=0;
    	for (temp=1;temp<i;temp++)
    		pre=pre->next;
    	Node *P = (Node *)malloc(sizeof(Node));
    	P->data = x;
    	P->next=pre->next;
    	pre->next=P;
    	return L;
    
    }
    
    //单链表的删除,在链表中删除值为x的元素
    
    LinkedList LinkedListDel(LinkedList L,ElemType x)
    {
    	Node *pre,*p;//p为查找的结点 pre为前驱结点
    	p=L->next;
    	while (p->data!=x)
    	{
    		pre=p;
    		p=p->next;
    		
    	}
    	pre->next=p->next;
    	free(p);
    	return L;
    	
    }
    //显示单链表数据
    void LinkedListShow(LinkedList L)
    {
    	LinkedList temp;
    	int i=0;
    	for(i=1,temp = L->next; temp != NULL; i++,temp = temp->next)
            printf("(%d)->%d ",i,temp->data);
        printf("
    ");
    }
    int main()
    {
    
    	//键盘中输入EOF方法:press Ctrl+Z on a new line
    	LinkedList L;
    	//尾插法建表
    	printf("请输入单链表的数据:
    ");
    	L=LinkedListCreateTail();
    	printf("该链表为:
    ");
    	LinkedListShow(L);
    
    	int i;
    	ElemType x;
    	printf("请输入插入数据的位置和值,用空格隔开:
    ");
    	scanf("%d %d",&i,&x);
    	LinkedListInsert(L,i,x);
    	printf("该链表为:
    ");
    	LinkedListShow(L);
    
    	printf("请输入要删除的元素的值:");
        scanf("%d",&x);
        LinkedListDel(L,x); 
    	printf("该链表为:
    ");
    	LinkedListShow(L);
    	
    	return 0;
    }
    

      

  • 相关阅读:
    BZOJ 3085: 反质数加强版SAPGAP
    BZOJ 1053 [HAOI2007]反素数ant
    强化学习一:Introduction Of Reinforcement Learning
    BZOJ 2120: 数颜色
    2018暑假多校(杭电 + 牛客)
    算法笔记--可持久化线段树
    牛客练习赛22 简单瞎搞题
    BZOJ 1047: [HAOI2007]理想的正方形
    算法笔记--二项式反演
    BZOJ 1010: [HNOI2008]玩具装箱toy
  • 原文地址:https://www.cnblogs.com/pilihaotian/p/4830873.html
Copyright © 2011-2022 走看看