zoukankan      html  css  js  c++  java
  • 线性表之顺序表

    // ConsoleApplication4.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    #define INIT_SIZE 100
    #define INCRE_SIZE 10
    using namespace std;
    
    #define ERROR 0
    #define OK 1
    
    typedef int DataType;
    
    typedef struct
    {
    	DataType *elem;
    	int length;
    	int size;
    }SqList;
    
    void intitSqList(SqList *L){
    	L->elem = (DataType*)malloc(INIT_SIZE*sizeof(DataType));
    	if(!L->elem) exit(0);
    	L->length = 0;
    	L->size = INIT_SIZE;
    	return;
    }
    
    //直接在表的最后一位插入
    void insertAfterTail(SqList *L,DataType data)
    {
    	DataType *newbase;
    	if(L->length >= INIT_SIZE)
    	{
    		newbase = (DataType*)realloc(L->elem,(L->length + INCRE_SIZE)*sizeof(DataType));
    		if(!newbase) exit(0);
    		L->elem = newbase;
    		L->size += INCRE_SIZE;
    	}
    	L->length++;
    	L->elem[L->length] = data;
    }
    
    int insertSqList(SqList *L,int i,DataType data)//i表示第几个元素
    {
    	DataType *newbase;
    	cout<<"i="<<i<<"L.size="<<L->size;
    	if(i<1 ||i>L->size) return ERROR;
    	if(L->length >= INIT_SIZE)
    	{
    		newbase = (DataType*)realloc(L->elem,(L->length + INCRE_SIZE)*sizeof(DataType));
    		if(!newbase) return ERROR;
    		L->elem = newbase;
    		L->size += INCRE_SIZE;
    	}
    	cout<<"L.length"<<L->length;
    	
    	for(int j=L->length-1;j>=i;j--)
    	{
    		L->elem[i+1] = L->elem[i];
    	}
    
    	L->elem[i] = data;
    	L->length++;
    	cout<<"return ok";
    	return OK;
    }
    
    void print(SqList *L)
    {
    	if(L->length == 0) printf("%s","list is empty");
    	for(int i=1;i<=L->length;i++)
    	{
    		printf("%d,",L->elem[i]);//按指针取是从1开始的
    	}
    }
    
    void delete_Sq(SqList *L,int i)
    {
    	DataType *p,*ELEM,*q;//ELEM用来存放已删除的元素,p用来存放首地址,q用来存放最后一个元素的地址
    	if(i<1 || i>L->size) exit(0);
    	if(L->length == 0) exit(0);
    	p = &(L->elem[i-1]);
    	ELEM = p;
    	q = L->elem+L->length-1;
    	for(++p;p<=q;++q)
    	{
    		*(p-1) = *p;
    	}
    	--L->length;
    	return;
    }
    
    int locate(SqList *L,DataType data)
    {
    	int i;
    	int flag = 0;
    	for(i=1;i<=L->length;i++)
    	{
    		if(data = L->elem[i]) 
    		{
    			cout<<"find it"<<L->elem[i];
    			flag = 1;
    			break;
    		}
    	}
    	return flag;
    }
    
    void merge(SqList *La,SqList *Lb,SqList *Lc)
    {
    	
    	int i=1,j=1;
    	while(i<=La->length && j<=Lb->length)
    	{
    		if(La->elem[i] <=Lb->elem[j])
    		{
    		insertAfterTail(Lc,La->elem[i]);
    		i++;
    		}
    		else 
    		{
    			insertAfterTail(Lc,Lb->elem[j]);
    			j++;
    		}
    	}
    
    	while(i<=La->length) 
    	{
    		insertAfterTail(Lc,La->elem[i]);
    		i++;
    	}
    	while(j<=Lb->length)
    	{
    		insertAfterTail(Lc,Lb->elem[j]);
    		j++;
    	}
    }
    
    
    void main()
    {
    	/*SqList L;
    	intitSqList(&L);
    	//print(L);
    	DataType data = 1;
    	insertSqList(&L,1,data);
    	print(&L);
    	printf("%s","init over");
    	//delete_Sq(&L,1);
    	//print(&L);
    	//printf("delete over");
    	cout<<"search:"<<locate(&L,data);
    	insertAfterTail(&L,data);
    	print(&L);*/
    
    	SqList La,Lb,Lc;
    	intitSqList(&La);
    	intitSqList(&Lb);
    	intitSqList(&Lc);
    
    	insertAfterTail(&La,1);
    	insertAfterTail(&La,4);
    
    	insertAfterTail(&Lb,3);
    
    	merge(&La,&Lb,&Lc);
    	print(&Lc);
    }
    

      

  • 相关阅读:
    Enable Zombie
    python中调用c文件中的函数(ubuntu)
    NSNotificationCenter使用心得(原)
    TCP/UDP
    xcconfig 文件使用( 转 )
    TS流解析 (转)
    c 数字和char类型转换
    结构体如何使用NSData包装
    NSValue 保存定长的结构体
    遍历DOM的所有节点,输出宽度高度都大于50的元素节点名称
  • 原文地址:https://www.cnblogs.com/waiwai4701/p/4122802.html
Copyright © 2011-2022 走看看