欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

顺序表的基本操作

程序员文章站 2024-03-20 14:24:40
...

顺序表的基本操作

  • 顺序表的建立及遍历
#include<stdio.h>
#include<stdlib.h>
#define Maxsize 100
#define ERROR -1
#define OK -2

typedef struct{
	int data[Maxsize];
	int length;
}sqlist;

void initlist(sqlist& l,int e)
{
	l.length=e;
	for(int i=0;i<l.length;i++)
	{
		scanf("%d",&l.data[i]);
	}
}

void scan(sqlist& l)
{
	for(int i=0;i<l.length;i++)
	printf("%d ",l.data[i]);
	printf("\n");
}
  • 插入操作
int Insert(sqlist& l,int pos,int e)
{
	if(pos<1||pos>l.length+1||l.length>=Maxsize) return ERROR;
	for(int i=l.length-1;i>=pos-1;i--)
	l.data[i+1]=l.data[i];
	l.data[pos-1]=e;
	l.length++;
	return OK;
}
  • 删除操作
int Delete(sqlist& l,int pos)
{
	if(pos<1||pos>l.length) return ERROR;
	for(int i=pos;i<l.length;i++)
	l.data[i-1]=l.data[i];
	l.length--;
	return OK;
}
  • 逆序操作
void reverse(sqlist& l)
{
	int temp;
	for(int i=0;i<l.length/2;i++)
	{
		temp=l.data[i];
		l.data[i]=l.data[l.length-1-i];
		l.data[l.length-1-i]=temp;
	}
}
  • 查找操作
void findpos(sqlist& l,int e)
{
	for(int i=0;i<l.length;i++)
	{
		if(l.data[i]==e)
		printf("%d ",i+1);
	}
	printf("\n");
}
  • 删除特定元素
void Delete_s(sqlist& l,int e)
{
	int k=0;
	for(int i=0;i<l.length;i++)
	{
		if(l.data[i]!=e)
		{
			l.data[k]=l.data[i];
			k++;
		}
	}
	l.length=k;
}
  • 合并操作
int combine(sqlist& s1,sqlist& s2,sqlist& c)
{
	int i=0,j=0,k=0;
	if(s1.length+s2.length>c.length) return ERROR;
	while(i<s1.length&&j<s2.length)
	{
		if(s1.data[i]<s2.data[j])
		{
			c.data[k]=s1.data[i];
			k++;
			i++;
		}
		else
		{
			c.data[k]=s2.data[j];
			k++;
			j++;
		}
	}
	while(i<s1.length){
		c.data[k]=s1.data[i];
			k++;
			i++;
	}
	while(j<s2.length){
		c.data[k]=s2.data[j];
			k++;
			j++;
	}
	c.length=k;
	return OK;
}
相关标签: 数据结构