关于顺序表的简单操作合集

顺序表是最简单的一种,操作也是比较简单的增删找置


删除和插入需要进行前移或者后移,仅此


#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#define MAX 100

struct seList{
	int data[MAX];
	int n;
};

typedef struct seList * list;

list makelist(void);
void print(void);
int insertPost_seq(list palist, int p, int x);
void display(list palist, int n);
void reverseList(list palist);
void deleteall(list palist, int x);
void deleteV_seq(list palist, int x);

int main(void)
{
	list arr;
	char ch;
	int i, p, x, n = 0, num;

	arr = makelist();

	printf("输入原始数据个数:");
	scanf("%d", &num);
	printf("\n");
  printf("输入数据:");
	for(i = 0; i < num; i++)
	{
		scanf("%d", &arr->data[i]);
		arr->n += 1;
	}
	printf("数据读取完成....\n\n");

  printf("a.插入     b.删除某元素     c.输出顺序表\n");
  printf("d.置逆     e.删除所有值为x的元素     q.退出\n");

  while(scanf("%c", &ch) && ch != 'q')
  {

      switch(ch)
      {
        case 'a': printf("输入要插入的位置及元素:");scanf("%d %d", &p, &x);if (insertPost_seq(arr, p, x))display(arr, arr->n); print();break;
        case 'c': printf("展示如下:\n");display(arr, arr->n);print();break;
        case 'b': printf("删除的单个元素:");scanf("%d", &p);deleteV_seq(arr, p);display(arr, arr->n);print();break;
        case 'd': reverseList(arr);display(arr, arr->n);print();break;
        case 'e': printf("删除的值:");scanf("%d",&x);deleteall(arr, x);display(arr, arr->n);print();break;
      }
   }

}

void deleteall(list palist, int x)
{
  list temp = palist;
  int i, k, cup[MAX], j, count = 0, flag = 1;

  for(i = 0, j = 0; i < temp->n; i++)
  {
    if (temp->data[i] == x)
    {
        cup[j] = i;
        count++;
        j++;
    }else
      flag = 0;

  }

  if (flag)
  {
    for(i = count-1; i >= 0; i--)
    {
      for(k = cup[i]; k < temp->n; k++)
      {
        palist->data[k] = palist->data[k+1];
      }
      temp->n--;
    }
    printf("所有值为%d的元素删除成功\n", x);
  }else
  printf("无%d元素\n", x);
}

void reverseList(list palist)
{
  list temp = palist;
  int i, cup;

  for(i = palist->n-1; i >= ((palist->n + 1)/ 2); i--)
  {
    cup = palist->data[i];
    palist->data[i]= palist->data[palist->n-i-1];
    palist->data[palist->n-i-1] = cup;
  }
  printf("置逆成功\n");
}

void deleteV_seq(list palist, int x)
{
  list temp = palist;
  int i, cup, j, flag = 1;

  for(i = 0; i < temp->n; i++)
  {
    if (temp->data[i] == x)
    {
        cup = i;
        break;
    }else
    {
      flag = 0;
    }
  }

  if (flag)
  {
    for(j = cup; j < palist->n; j++)
    {
      palist->data[j] = palist->data[j+1];
    }
    palist->n--;
    printf("删除成功\n");
  }else
  printf("无%d元素\n", x);

}

list makelist(void)
{
	list plist;
	plist = (list)malloc(sizeof(struct seList));


	if (plist)
	{
		plist->n = 0;
		printf("顺序表创建成功\n");
		return plist;
	}
	else
	{
		printf("no memory");
	}

	return NULL;
}

int insertPost_seq(list palist, int p, int x)
{
	int i;
	if (p < 0 || p > palist->n)
	{
	  	printf("位置错误\n\n");
	  	return 0;
	}

	for(i = palist->n; i >= p; i--)
	{
		palist->data[i+1] = palist->data[i];
	}


	palist->data[p+1] = x;
	printf("插入成功\n");
	palist->n++;

	return 1;
}

void display(list palist, int n)
{
  list temp = palist;
  int j;
  for(j = 0; j < n; j++)
	{
		printf("%d ", temp->data[j]);
	}
	printf("\n");
	putchar('\n');
}


void print(void)
{
  printf("a.插入     b.删除某元素     c.输出顺序表\n");
  printf("d.置逆     e.删除所有值为x的元素     q.退出\n");
}





  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值