数据结构:顺序表的实现(C语言实现)


顺序表的实现
     (1) 初始化顺序表
     (2) 建立顺序表
     (3) 销毁顺序表 //顺序表静态分配内存,在顺序表退出作用域时自动释放该变量所占内存单元,无需销毁
     (4) 判空操作
     (5) 求顺序表的长度
     (6) 遍历操作
     (7) 按值查找
     (8) 按位查找
     (9) 插入操作
     (10) 删除操作
所需要实现的十大功能



#include<stdio.h>
#define MaxSize 100
typedef int typeDate; //定义线性表的数据类型,假设为int型  
struct SeqList{
  typeDate date[MaxSize];
  int length;
};

void IniList(SeqList *L) {//初始化顺序表 
  L -> length = 0;
}

int SetList(SeqList *L, typeDate a[], int n) {//建立顺序表 
  if(n > MaxSize)  {
    printf("顺序表空间不足,无法建立\n");
    return 0; 
  }
  for(int i = 0; i < n; i++)
    L -> date[i] = a[i];
  L -> length = n; 
  return 1;
} 

void Empty(SeqList *L) {//判空操作 
  if (L -> length == 0) printf("顺序表为空\n");
  else printf("顺序表不为空\n");
}

int length(SeqList *L) {//求顺序表长度 
  return L -> length;
} 

void PrintList(SeqList *L) {//遍历顺序表 
  for(int i = 0; i < L -> length; i++)
    printf("%d ", L -> date[i]);
  printf("\n");
}

int Locate(SeqList *L, typeDate x) {//按值查找 
  for(int i = 0; i < L -> length; i++)
    if(L -> date[i] == x) {
      printf("该值位于第%d位\n", i);
      return 1;
    }
  printf("顺序表中没有该值, 查找失败\n");
  return 0;
}

int Get(SeqList *L, typeDate n) {//按位查找 
  if(n < 0 || n > L -> length) {
    printf("查找位置非法,查找失败\n");
    return 0; 
  }
  return L -> date[n];
}

int Insert(SeqList *L, int j, typeDate x) {// 插入操作 
  if(L -> length >= MaxSize) {
    printf("上溢错误,插入失败\n");
    return 0; 
  }
  if(j < 0 || j > L -> length) {
    printf("位置错误,插入失败\n");
    return 0;
  }
  for(int i = L -> length; i >= j; i--)
    L -> date[i] = L -> date[i-1];
  L -> date[j] = x;
  L -> length++;
  return 1;
} 

int Delete(SeqList *L, int j) {
  if(L -> length <= 0) {
    printf("下溢错误,删除失败\n");
    return 0;
  }
  if(j < 0 || j > L -> length) {
    printf("超出顺序表范围, 删除失败\n");
    return 0;
  }
  for(int i = j; i < L -> length; i++)
    L -> date[i] = L -> date[i+1];
  L -> length--;
  return 1;
}
int main() {
  int n;
  int Test[5] = {1, 2, 3, 4, 5};
  SeqList L;
  SetList(&L, Test, 5);
  Insert(&L, 0, 6);//在第0位插一个6
  Insert(&L, 6, 7);//在第6位插一个7 
  Insert(&L, 3, 10);
  Locate(&L, 6);//查找6这个数的位置 
  printf("该位置的数字是:%d\n", Get(&L, 3));
  PrintList(&L);
  for(int i = 0; i < 5; i++) {
    printf("请输入你想删除的元素下标: ");
    scanf("%d", &n);
    printf("\n");
    Delete(&L, n);
    PrintList(&L); 
  }
} 


参考书籍: <<数据结构-从概念到C实现>>
数据结构基于C语言实现顺序表. #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100/* 定义二叉树节点类型 */ typedef struct node { char data; struct node *lchild, *rchild; }BTNode; BTNode* CreatBitTree()/* 递归前序建立二叉树 */ { char c; BTNode *T; scanf("%c", &c); if (c == ' ') /* 遇到空节点停止递归 */ { T = NULL; } else { T = (BTNode*) malloc(sizeof(BTNode)); T->data = c;/* 建立根节点 */ T->lchild = CreatBitTree();/* 递归先序建立左子树 */ T->rchild = CreatBitTree();/* 递归先序建立右子树 */ } return T; } void PreOrder(BTNode* T)/* 非递归前序遍历二叉树 */ { BTNode *stack[MAXSIZE], *p; int top = 0; if (T != NULL) { //top++;/* 根节点入栈 */ stack[top] = T; while (top > -1)/* 栈不空时循环 */ { p = stack[top];/* 出栈并访问该节点 */ top--; printf("%c ", p->data); if (p->rchild != NULL)/* 右孩子入栈 */ { top++; stack[top] = p->rchild; } if (p->lchild != NULL)/* 左孩子入栈 */ { top++; stack[top] = p->lchild; } } printf("\n"); } } void PrintTree(BTNode* T,int nLayer) //按竖向树状打印的二叉树 { int i; if(T==NULL) return ; PrintTree(T->rchild,nLayer+1); for(i=0;i<nLayer;i++) printf(" "); printf("%c\n",T->data); PrintTree(T->lchild,nLayer+1); } int main()/* 主函数 */ { BTNode *r = NULL; printf("请先序输入二叉树:(如:AB 三个空格表示A为根结点,B为左子树的二叉树)\n"); r = CreatBitTree(); printf("按竖向树状打印的二叉树:\n"); PrintTree( r,0); printf("先序非递归遍历二叉树:"); PreOrder(r); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值