程序人生——苏嵌第六天

苏嵌教育                                                                     暑期实习


                                          学习日志                                            姓名:胡昊          日期:2018.7.21



                                                

  • 今日学习任务:                                 学习链表。

  • 今日任务完成情况:                         完成链表的操作函数,实现了链表建立,增加,删除。主要代码:
    /*************************************************************************
    	> File Name: LinkList.c
    	> Author: HuHao
    	> Mail: [email protected] 
    	> Created Time: 2018年07月20日 星期五 21时10分56秒
     ************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    
    #define MAXSIZE 20 /* 存储空间初始分配量 */
    
    typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
    typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */
    
    typedef struct Node
    {
    	    ElemType data;
    		struct Node *next;
    }Node;
    
    typedef struct Node * LinkList; /* 定义LinkList */
    
    /*定义输出函数*/
    Status visit(ElemType c)
    {
    	printf("%d\n",c);
    	return OK;
    }
    
    /* 初始化链表 */
    Status InitList(LinkList *L)
    {
    	*L=(LinkList)malloc(sizeof(Node));/* 产生头结点,并使L指向此头结点 */
    	if(NULL == (*L))/* 存储分配失败 */
    		return ERROR;
    	(*L)->next=NULL;/* 指针域为空 */
    	return OK;
    }
    
    /* 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */
    Status ListEmpty(LinkList L)
    {
    	if(L->next==NULL)
    		return TRUE;
    	else
    		return FALSE;
    }
    
    
    /* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 */
    Status ClearList(LinkList *L)
    {
    	LinkList p,q;
    	p=(*L)->next;
    	while(p)
    	{
    		q=p->next;
    		free(p);
    		p=q;
    	}
    	(*L)->next=NULL;
    	return OK;
    }
    
    /* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */
    int ListLength(LinkList L)
    {
    	int i=0;
    	LinkList p=L->next;
    	while(p!=NULL)
    	{
    		p=p->next;
    		i++;
    	}
    	return i;
    }
    
    /*
     * 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)
     *操作结果:用e返回L中第i个数据元素的值
     */
    
    Status GetElem(LinkList L,int i,ElemType *e)
    {
    	int j;
    	LinkList p=L->next;
    	j=1;
    
    	while(p!=NULL&&j!=i)
    	{
    		p=p->next;
    		j++;
    	}
    	if(p==NULL || j>i)
    		return ERROR;
    	*e=p->data;
    	return OK;
    }
    
    /* 初始条件:顺序线性表L已存在 
     * 操作结果:返回L中第1个与e满足关系的数据元素的位序。
     * 若这样的数据元素不存在,则返回值为0 
     */
    int LocateElem(LinkList L,ElemType e)
    {
    	int i=0;
    	LinkList p=L->next;
    	while(p!=NULL)
    	{
    		i++;
    		if(p->data==e)
    			return i;
    	}
    	return 0;
    }
    
    /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1, 
     * 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 
     */
    Status ListInsert(LinkList *L,int i,ElemType e)
    {
    	int j=1;
    	LinkList p,q;
    	p=*L;
    
    	while(p!=NULL && j<i)
    	{
    		p=p->next;
    		j++;
    	}
    
    	if(p==NULL || j>i)
    		return ERROR;
    
    	q=(LinkList)malloc(sizeof(Node));
    
    	q->data=e;
    
    	q->next=p->next;
    	p->next=q;
    
    	return OK;
    }
    
    /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) 
     * 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1
     */
    Status ListDelete(LinkList *L,int i,ElemType *e) 
    {
    	int j=1;
    	LinkList p,q;
    	p=*L;
    
    	while(p!=NULL && j<i)
    	{
    		p=p->next;
    		j++;
    	}
    
    	if(p==NULL || j>i)
    		return ERROR;
    
    	q=p->next;
    	p->next=q->next;
    	*e=q->data;
    	free(q);
    	return OK;
    }
    
    /* 初始条件:顺序线性表L已存在 
     * 操作结果:依次对L的每个数据元素输出 
     */
    Status ListTraverse(LinkList L)
    {
    	LinkList p = L->next;
    	if(p==NULL)
    		return ERROR;
    	while(p!=NULL)
    	{
    		visit(p->data);
    		p=p->next;
    	}
    	printf("\n");
    	return OK;
    }
    
    
    
    /*
     * 随机产生n个元素的值,建立带表头结点的单链线性表L(头插法) 
     */
    void CreateListHead(LinkList *L, int n) 
    {
    	LinkList p;
    	int i;
    	srand(time(NULL));
    	*L=(LinkList)malloc(sizeof(Node));
    	(*L)->next=NULL;
    	for(i=0;i<n;i++)
    	{
    		p=(LinkList)malloc(sizeof(Node));
    		p->data=rand()%100+1;
    		p->next=(*L)->next;
    		(*L)->next=p;
    	}
    }
    
    /*  
     *  随机产生n个元素的值,建立带表头结点的单链线性表L(尾插法) 
     */
    void CreateListTail(LinkList *L, int n) 
    {
    	LinkList p,q;
    	int i;
    	srand(time(NULL));
    	*L=(LinkList)malloc(sizeof(Node));
    	q=*L;
    	for(i=0;i<n;i++)
    	{
    		p=(LinkList)malloc(sizeof(Node));
    		p->data=rand()%100+1;
    		q->next=p;
    		q=p;
    	}
    	q->next=NULL;
    }
    
    int main()
    {
    	return 0;
    }
    	
    

  • 今日开发中出现的问题汇总:           对指针的使用,形参和实参的区别。

  • 今日未解决问题:                             无

  • 自我评价:                                        自我感觉良好,基本掌握了新知识。

  • 其他:                                               随着一天的学习落幕,收获满满,期待着明天的学习和明天的收获。
发布了9 篇原创文章 · 获赞 2 · 访问量 652

猜你喜欢

转载自blog.csdn.net/a45654645/article/details/81147940