数据结构练习

void Union(List &La,List &Lb)
{
	La_len=ListLength(La);
	while(!EmptyList)
	{
		ListDelete(Lb,1,e);
		if(!LocateElem(La,e))
			ListInsert(La,++La_len,e);
	}
	DestroyList(Lb);
}

void Insertsect(List&La,List&Lb)
{
	i=1;
	while(i<=ListLength(La))
	{
		GetElem(La,i,ai);
		if(!LocateElem(La,e))
			ListDelete(La,i,e);
		else
			i++;
	}
	DestroyList(Lb);
}


const LIST_INIT_SIZE=100;
const LISTINCREAMENT=10;
typedef struct
{
	ElemType *elem;
	int Length;
	int ListSize;
}SqList;

status InitList(SqList &L)
{
	L.elem=new ElemType[LIST_INIT_SIZE];
	if(!L.elem)
		return OVERFLOW;
	L.Length=0;
	L.ListSize=LIST_INIT_SIZE;
	return OK;
}

Status InitList(SqList&L)
{
	L.elem=new ElemType[n];
	if(!L.elem)
		return OVERFLOW;
	L.length=0;
	L.ListSize=LIST_INIT_SIZE;
	return OK;
}

int LocateElem(SqList &L,ElemType e)
{
	p=L.elem;
	i=1;
	while(i<=L.length&&*p++!=e)
		i++
		return i<=Length?i:0;
}



Status GetElem(SqList L,int i,ElemType &e)
{
	if(i<1||i>L.length)
		return ERROR;
	e=*(L.elem+i-1);
	return OK;
}

void DestroyList(SqList&L)
{
	delete[]L.elem;
	L.Listsize=L.length=0;
}



Status ListInsert(SqList &L,int i,ElemType e)
{
	if(i<1||i>L.length+1)
		return ERROR;
	if(L.length>=L.listsize)
	{
		newsize=L.listsize+LISTINCREMENT;
		newbase=(ElemType*)realloc(L.elem,newsize*sizeof(ElemType));
		if(!newbase)
			return OVERFLOW;
		L.elem=base;
		L.listsize+=LISTINCREMENT;
	}
	q=L.elem+i-1;
	for(p=L.elem+L.length-1;p>=q;p--)
		*(p+1)=*q;
	*q=e;
	L.length++;
	return OK;
}

Status ListInsert(SqList &L,int i,ElemType e)
{
	if(i<1||i>L.length+1)

		return ERROR;
	if(L.length>L.listsize)
	{
		newsize=L.listsize+LISTINCREMENT;
		newbase=(ElemType*)realloc(L.elem,newsize*sizeof(ElemType));
		if(!newbase)
			return OVERFLOW;
		L.elem=newbase;
		L.listsize+=LISTINCREMENT;
	}
	q=L.elem+i-1;
		for(p=L.elem+L.length-1;p>=q;p--)
			*(p+1)=*q;
		*q=e;
		L.length++;
		return++;
}




Status LinkList(LinkList&L)
{
	L.head=L.tail=(Link)malloc(sizeof(struct node));
	if(!L.head)
		return OVERFLOW;
	L.head->next=NULL;
	L.len=0;
	return OK;
}

typedef struct LNode
{
	ElemType data;
	struct LNode *next;
}*Link,*Position;

typedef struct
{
	Link head,tail;
	int len;
}

Position LocateElem(LinkList L,ElemType e,)



void porder(BTree*b)//前序遍历
{
	BTree*St[MaxSize],*p;
	int top=-1;
	if(b!=NULL)
	{
		top++;
		St[top]=b;
		while(top>-1)
		{
			p=St[top];
			top--;
			printf("%c ",p->data);
			if(p->rchild!=NULL)
			{
				top++;
				St[top]=p->rchiild;
			}
			if(p->lchild!=NULL)
			{
				top++;
				St[top]=p->lchild;
			}
		}
	}
}


void invert1(SNode*&L)//头插法
{
	SNode*q=L->next;
	L->next=NULL;
	while(q!=NULL)
	{
		r=q->next;
		q->next=L;
		L=q;
		q=r;
	}
}

#include <stdio.h>
#include <stdlib.h>

typedef struct link
{
	char data;
	struct link *next;
}linklist;

linklist *CreateList_Front();	//头插法创建单链表
linklist *CreateList_End();		//尾插法创建单链表
void ShowLinklist(linklist *h); //输出显示链表

int main(void)
{
	int choice;
	linklist *head;

	//head = (linklist*)malloc(sizeof(linklist));
	while(1)
	{
		printf("单链表的创建\n");
		printf("1.使用头插法创建单链表\n");
		printf("2.使用尾插法创建单链表\n");
		printf("3.链表输出显示\n");
		printf("4.退出\n");
		printf("做出选择:\n");
		scanf("%d",&choice);
		switch(choice)
		{
		//头插法
		case 1:
			head = CreateList_Front();
			break;
		//尾插法
		case 2:
			head = CreateList_End();
			break;
		//输出链表
		case 3:
			ShowLinklist(head);
			break;
		//退出程序
		case 4:
			return 0;
			break;
		default:
			break;
		}
	}
	return 1;
}

linklist *CreateList_Front()
{
	linklist *head, *p;
	char ch;

	head = NULL;
	printf("依次输入字符数据(‘#’表示输入结束):\n");
	ch = getchar();
	while(ch != '#')
	{
		p = (linklist*)malloc(sizeof(linklist));
		p->data = ch;
		p->next = head;
		head = p;
		ch = getchar();				//头插法算法简单 核心就两句p->next = head;head = p;
	}
	return head;
}

linklist *CreateList_End()
{
	linklist *head, *p, *e;
	char ch;

	head = NULL;
	e = NULL;
	printf("请依次输入字符数据('#'表示输入结束):\n");
	ch = getchar();
	while(ch != '#')
	{
		p = (linklist*)malloc(sizeof(linklist));
		p->data = ch;
		if(head == NULL)		//先判断输入的是不是第一个节点
		{
			head = p;			
		}
		else
		{
			e->next = p;		//e始终指向输入的最后一个节点
		}
		e = p;
		ch = getchar();			
	}
	if(e != NULL)				//如果链表不为空,则最后节点的下一个节点为空
	{
		e->next = NULL;
	}
	return head;				//尾插法比头插法复杂一些,程序中要做两次判断,分别是判断第一个节点和最后一个节点的判断。且消耗多一个指针变量e。
}

void ShowLinklist(linklist *h)
{
	linklist *p;

	p = h;
	while(p != NULL)
	{
		printf("%c ", p->data);
		p = p->next;
	}
	printf("\n");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值