zoukankan      html  css  js  c++  java
  • 数据结构【清华严蔚敏】——顺序表的基本运算

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

    #include <stdio.h> 
    #include <stdlib.h>
    #define OK 1
    #define ERROR 0
    #define LIST_INIT_SIZE 100 	
    #define LISTINCREMENT  10 	
    typedef char ElemType;	
    typedef int Status; 
    
    typedef struct 
    {
       ElemType     *elem; 								
       int 			length;		  				
       int 			listsize; 		
    } SqList;
    
    // 算法2.3  初始化 
    Status InitList_Sq(SqList &L) 
    {  
      L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
      if (!L.elem) exit(-1);        // 存储分配失败
      L.length = 0;                  
      L.listsize = LIST_INIT_SIZE;   
      return OK;
    }
    
    // 算法2.4  插入 
    Status ListInsert_Sq(SqList &L, int i, ElemType e) 
    {  
      ElemType *p, *q;
      if (i < 1 || i > L.length+1) 
      {// i的合法值为1≤i≤ListLength_Sq(L)+1
      	return ERROR;  
      }
      
      if (L.length >= L.listsize) {// 当前存储空间已满,增加容量
        ElemType *newbase = (ElemType *)realloc(L.elem,
                      (L.listsize+LISTINCREMENT)*sizeof (ElemType));
        if (!newbase) return ERROR;   								
        L.elem = newbase;             							
        L.listsize += LISTINCREMENT;  							
      } 
      q = &(L.elem[i-1]);   							
      for (p = &(L.elem[L.length-1]); p>=q; --p) 
      	*(p+1) = *p;									                              											
      *q = e;      
      ++L.length;   
      return OK;
    } 
    
    //算法2.5 删除 
    Status ListDelete_Sq(SqList &L,int i, ElemType &e)
    {
    	ElemType *p,*q;
    	if(i<1||i>L.length)  return ERROR;
    	p=L.elem+i-1; //p=&(L.elem[i-1]);
    	e=*p;
    	q=L.elem+L.length-1;//最后一个元素的位置
    	for(++p;p<=q;p++)
    		*(p-1)=*p;
    	--L.length;
    }
    
    //销毁顺序表操作 
    Status DestroyList(SqList &L)
    { 
       free(L.elem);
       L.elem=NULL;
       L.length=0;
       L.listsize=0;
       return OK;
    
    }
    
    Status ListEmpty(SqList L)
    { 
       if(L.length==0)
         return 1;
       else
         return 0;
     
    }
     
    int	main()
    {
    	char A[5] = {'a','b','c','d','e'},temp='f';
    	//temp用来存放插入的字符以及保存删除字符的值 
    	int	i;
    	
    	SqList	List;	
    	InitList_Sq(List);
    	
    	for(i=1; i<=5; i++)
    		ListInsert_Sq(List,i,A[i-1]);
    		
    	if(!ListEmpty(List)) 
    		printf("顺序表非空
    ");
    		
    	printf("开始时元素序列为:
    ");
    	for(i=1; i<= List.length; i++)
    		printf("%c ", List.elem[i-1]);	
    			
    	i=4;   //插入位置 
    	ListInsert_Sq(List,i,temp);
    	printf("
    插入后的元素序列为:
    ");
    	for(i=1; i<= List.length; i++)
    		printf("%c ", List.elem[i-1]);	
        
        i=3;
    	ListDelete_Sq(List,i,temp) ;
    	printf("
    删除后的元素序列为:
    ");
    	for(i=1; i<= List.length; i++)
    		printf("%c ", List.elem[i-1]);
    	
    	if(DestroyList(List)) 
    	printf("
    成功释放顺序表L");
    			
        getchar();
    }
    
  • 相关阅读:
    MVC中使用AuthorizeAttribute做身份验证操作
    MVC Dynamic Authorization--示例市在Action前进行的验证,应提前到Auth过滤器
    forms
    UEditor
    Test log4net
    log4net.config
    [转]log4net使用(WinForm/WebFrom)
    如何指定模型的显示格式和模板
    64位系统中连接Access数据库文件的一个问题
    VS2008简体中文正式版序列号
  • 原文地址:https://www.cnblogs.com/vivid-victory/p/10090482.html
Copyright © 2011-2022 走看看