zoukankan      html  css  js  c++  java
  • C语言数据结构-线性表SqList

    #ifndef __SQLLIST_H__
    #define __SQLLIST_H__
    
    
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLF -1
    #define OVERFLOW -2
    
    #define LIST_INIT_SIZE 100
    #define LISTINCREMENT 10
    
    typedef int Status;
    
    typedef int ElemType;
    
    typedef struct {
    	ElemType *elem;
    	ElemType length;
    	ElemType listsize;
    }SqList;
    
    #endif
    

      

    #include"SeqList.h"
    #include<stdlib.h>
    #include<stdio.h>
    
    Status initList_Sq(SqList &L) {
    	L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    	if(!L.elem) {
    		exit(OVERFLOW);
    	}
    	L.length = 0;
    	L.listsize = LIST_INIT_SIZE;
    	return OK;
    }
    
    Status listInsert(SqList &L, int i, ElemType e) {
    	if(i < 1 || i > L.length + 1){
    		return ERROR;
    	}
    
    	if(L.length > L.listsize) {
    		ElemType *newbase = (ElemType *)realloc(L.elem,
    			(L.listsize + LISTINCREMENT) * sizeof(ElemType));
    		if(!newbase) {
    			exit(OVERFLOW);
    		}
    		L.elem = newbase;
    		L.listsize += LISTINCREMENT;
    	}
    
    	ElemType *q = &(L.elem[i - 1]);
    	for(ElemType *p = &(L.elem[L.length - 1]); p >= q; --p) {
    		*(p + 1) = *p;
    	}
    
    	*q = e;
    	++L.length;
    	return OK;
    }
    
    void pShow(SqList L){
    	printf("=======  SqList   ======
    ");
    	if(L.length != 0) {
    
    		ElemType *t = L.elem;
    		for(int i = 0; i < L.length; i++) {
    			printf("L.elem[%d] = %d
    ", i, t[i]);
    		}
    	} else {
    
    	}
    
    	printf("L.length = %d
    ", L.length);
    	printf("L.listsize = %d
    ", L.listsize);
    }
    
    Status GetElem(SqList &L, int i, ElemType &e) {
    	if(i > L.length || i < 1) {
    		exit(OVERFLOW);
    	}
    
    	e = L.elem[i - 1];
    	return OK;
    }
    
    Status LocateElem_Sq(SqList L, ElemType e) {
    	ElemType i = 1;
    	ElemType *p = L.elem;
    
    	while(i <= L.length && *p++ != e) {
    		++i;
    	}
    
    	if(i <= L.length) {
    		return i;
    	} else{
    		return 0;
    	}
    }
    
    Status ListLength(SqList L) {
    	return L.length;
    }
    
    void Union(SqList &a, SqList b) {
    	ElemType a_len = ListLength(a);
    	ElemType b_len = ListLength(b);
    	ElemType e;
    	for (int i = 1; i <= b_len; ++i)
    	{
    		/* code */
    		GetElem(b, i, e);
    		if(!LocateElem_Sq(a, e)) {
    			listInsert(a, ++a_len, e);
    		}
    	}
    }
    
    void MergeList(SqList la, SqList lb, SqList &Lc) {
    	initList_Sq(Lc);
    	ElemType i = 1;
    	ElemType j = 1;
    	ElemType k = 0;
    
        ElemType La_len = ListLength(la);
        ElemType Lb_len = ListLength(lb);
    
        ElemType ai, bj;
        while((i <= La_len) && (j <= Lb_len)) {
        	GetElem(la, i, ai);
        	GetElem(lb, j, bj);
        	if(ai <= bj) {
        		listInsert(Lc, ++k, ai);
        		++i;
        	} else{
        		listInsert(Lc, ++k, bj);
        		++j;
        	}
        }
    
        while(i <= La_len) {
        	GetElem(la, i++, ai);
        	listInsert(Lc, ++k, ai);
        }
    
        while(j <= Lb_len) {
         	GetElem(lb, j++, bj);
        	listInsert(Lc, ++k, bj);   	
        }
    
    }
    
    Status ListDelete_Sq(SqList &L, int i, ElemType &e) {
    	if(i < 1 || (i > L.length)) {
    		return ERROR;
    	}
    
    	ElemType *p = &(L.elem[i - 1]);
    	e = *p;
    	ElemType *q = L.elem + L.length - 1;
    	for(++p; p <= q; ++p) {
    		*(p -1) = *p;
    	}
    	--L.length;
    	return OK;
    }
     
    int main() {
    
    	ElemType e;
    
    	SqList L;
    	initList_Sq(L);
    	for (int i = 0; i < 10; ++i)
    	{
    		/* code */
    		listInsert(L, i + 1, i);
    	}
    
    	SqList t;
    	initList_Sq(t);
    	for (int i = 0; i < 10; ++i)
    	{
    		/* code */
    		listInsert(t, i + 1, i + 10);
    	}
    
    	GetElem(L, 5, e);
    	printf("l5 = %d
    ", e);
    
    	ElemType index = 6;
    	ElemType value = LocateElem_Sq(L, index);
    	printf("index = %d, value = %d
    ", index, value);
    
    	SqList r;
    	MergeList(L, t, r);
    
    	pShow(r);
    
    	SqList a;
    	initList_Sq(a);
    	listInsert(a, 1, 3);
    	listInsert(a, 2, 5);
    	listInsert(a, 3, 8);
    	listInsert(a, 4, 11);
    
    	SqList b;
    	initList_Sq(b);
    	listInsert(b, 1, 2);
    	listInsert(b, 2, 6);
    	listInsert(b, 3, 8);
    	listInsert(b, 4, 9);
    	listInsert(b, 5, 11);
    	listInsert(b, 6, 15);
    	listInsert(b, 7, 20);
    
    	SqList c;
    	MergeList(a, b, c);
    	pShow(c);
    
    	Union(a, b);
    	pShow(a);
    
    	ListDelete_Sq(b, 6, e);
    	pShow(b);
    	return 0;
    }
    

      

  • 相关阅读:
    主席树套树状数组——带修区间第k大zoj2112
    卢卡斯定理——应用hdu4349
    没这5个证 付完钱房子也不是你的!
    Java transient关键字使用小记
    线性结构与非线性结构
    java事件处理机制(自定义事件)
    反射setAccessible()方法
    排序
    [JIRA] 最新Linux安装版本jira6.3.6安装破解以及数据导入的详细步骤
    深入研究java.lang.ThreadLocal类
  • 原文地址:https://www.cnblogs.com/maduar/p/13195500.html
Copyright © 2011-2022 走看看