⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seqlist.cpp

📁 用C语言编写实现数据结构方面的例子
💻 CPP
字号:
#include <stdio.h> 
#define MAXSIZE 50

struct SeqList 
{
	int data[MAXSIZE];
	int last;
};


void SeqListSetnull(struct SeqList *p)/*装入表*/
{
	p->last=0;
}

int SeqListLength(struct SeqList *p)/*表长度*/
{
	return p->last;
}

void SeqListGet(struct SeqList *p,int i)//取得一个元素
{
	if (i<1 && i>p->last)
	{
		printf("错误");
	}
	else
	printf("该序号对应的元素为:%d\n",p->data[i-1]);

}

void SeqListLocate(struct SeqList *p,int x)//查找值为x的元素
{
	int i=0;
	while (i<p->last && p->data[i]!=x)
		i++;
	if (i==p->last)
		printf("没有这元素\n");
	else
		printf("该元素第一次出现的位置:%d\n",i+1);
}

void SeqListInsert(struct SeqList *p,int i,int x)//在i的位置插入元素x
{
	int j;
	if (i<1 && i>p->last+1)
	{
		printf("位置不正确不能行插入\n");
	}
	else
	{	
		for (j=p->last;j>=i;j--)
		{
			p->data[j]=p->data[j-1];
		}
		p->last++;
		p->data[i-1]=x;
	}
	printf("线性表为:");
	for (j=0;j<p->last;j++)
	{
		printf("%d->",p->data[j]);
	}

}

void SeqListDelete(struct SeqList *p, int i)//在i位置删除
{
	int j;

	if (i<1 || i>p->last)
	{
		printf("错误");
	}
	else
	{	
		for (j=i;j<=p->last;j++)
		p->data[j]=p->data[j+1];
		p->last--;
	}
	printf("线性表为:");
	for (i=0;i<p->last;i++)
	printf("%d->",p->data[i]);

}

void SeqListSort(struct SeqList *p)//从小到大排
{
	int i,j;
	int temp;

	for (i=0;i<p->last-1;i++)
	{
		for (j=i+1;j<p->last;j++)
		{
			if (p->data[i]>p->data[j])
			{
				temp=p->data[i];
				p->data[i]=p->data[j];
				p->data[j]=temp;
			}
		}
	}

	printf("顺序表排序后:");
	for (i=0;i<p->last;i++)
	{
		printf("%d->",p->data[i]);
	}
}

void SeqListDisplay(struct SeqList *p)
{
	int i;
	for (i=0;i<p->last;i++)
	{
		printf("%d->",p->data[i]);
	}
}

void SeqListMerge(struct SeqList *p1,struct SeqList *p2)//两非递减有序顺序表合并成*p3
{
	struct SeqList l,*p3;
	int i,j,k;
	i=0;
	j=0;
	k=0;

	p3=&l;
	while (i<p1->last && j<p2->last)//p1 p2非空
	{
		if (p1->data[i]<=p2->data[j])
		{
			p3->data[k++]=p1->data[i++];
		}
		else
			p3->data[k++]=p2->data[j++];
	}
	while (i<p1->last)//p2已空,将p1剩余部分复制到新表
	{
		p3->data[k++]=p1->data[i++];
	}
	while(j<p2->last)//p1已空,将p2剩余部分复制到新表
	{
		p3->data[k++]=p2->data[j++];

	}

	printf("顺序表合并后:");
	for (i=0;i<k;i++)
	{
		printf("%d->",p3->data[i]);
	}

}



int main()
{
	int i,j;
	int flag=1;
	int select;
	char ch;
	struct SeqList *p;
	struct SeqList *p2;
	struct SeqList l;
	struct SeqList l2;
    
	SeqListSetnull(&l);
	printf("请输入五个整数:");
	p=&l;
	p->last=0;
	for (i=0;i<5;i++)
	{
		scanf("%d",&l.data[i]);
		p->last++;
	}

	SeqListSetnull(&l2);
	printf("请再输入五个整数:");
	p2=&l2;
	p2->last=0;
	for (i=0;i<5;i++)
	{
		scanf("%d",&l2.data[i]);
		p2->last++;
	}




	while (flag)
	{	
		printf("\n");
		
		printf("1:置空表!   2:求长度! \n");
		printf("3:读取元素! 4:定位查找! \n");
		printf("5:插入!     6:删除! \n");
		printf("7:排序!     8:显示! \n");
		printf("9:合并\n");

		
		printf("请选择(1----8) \n");
		scanf("%d",&select);
		switch(select)
		{
		case 1: SeqListSetnull(p);break;
		case 2: printf("顺序表长度为:%d",SeqListLength(p));
			    break;
		case 3: printf("请输入序号:");
			scanf("%d",&i);
			SeqListGet(p,i);break;
		case 4:printf("请输入查找的元素:");
			scanf("%d",&i);
			SeqListLocate(p,i);
		case 5:printf("输入插入的位置及元素:");
			scanf("%d%d",&i,&j);
     			SeqListInsert(p,i,j);
     			break;
		case 6: printf("输入所要删除数据的位置:");
       			scanf("%d",&i);
       			SeqListDelete(p,i);    
       			break;
		case 7:SeqListSort(p);SeqListSort(p2);
			break;
		case 8:SeqListDisplay(p);  
			break;
		case 9:SeqListMerge(p,p2);
			break;
		default: printf("error");
		}

		printf("继续操作(Y|N)");
     	getchar();
        ch=getchar();
		if ((ch=='n')||(ch=='N'))
			flag=0;
		else
			flag=1;
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -