凌风清羽 发表于 2016-5-22 16:54:02

顺序表创建以及操作

/*************************顺序表的创建以及使用**********************************/
#include <stdio.h>
#include <stdlib.h>
#define MAXLISTSIZE 1024/* 定义顺序表最大容量 */
/********************定义顺序表******************************/
typedef struct/* 定义顺序表节点类型 */
{
int data;/* 顺序表*/
int last; /*顺序表元素个数 */
}linearlist;
/***********************打印顺序表***************************/
void ListList(linearlist* list) /* 打印线性顺序表 */
{
int i;
printf("当前线性表的状态:\n");
if(list -> last == 0) /*顺序表为空*/
    printf("当前顺序表为空");
else
    for(i = 0; i < (list -> last); i++) /*循环遍历顺序表*/
      printf("[%4d]", list -> data); /*输出元素*/
printf("\n");
}
/**************************打印说明文档************************/
void Output(linearlist* list) /* 打印说明文档 */
{
system("cls"); /* 清屏 */
printf("-             顺序表                -\n"); /* 输入功能菜单 */
printf("-a: 追加一个节点 i: 插入一个节点-\n");
printf("-d: 删除一个节点 e: 退出          -\n");
ListList(list);    /* 打印线性顺序表*/
}
/***************************创建线性顺序表***********************/
linearlist* CreateList()/* 创建线性顺序表 */
{
linearlist *list = (linearlist*)malloc(sizeof(linearlist)); /* 分配空间 */
list -> last = 0; /* 初始化头节点值 */
return list; /* 返回初始化头节点指针 */
}
/***************************追加结点***********************/
void AppendNode(linearlist* list, int n)/* 追加节点 */
{
if(list -> last < MAXLISTSIZE )/*顺序表不溢出 */
{
    list -> data = n; /* 初始化节点值 */
    list -> last += 1; /* 顺序表长度加1 */
}
}
/***************************插入结点***********************/
void InsertNode(linearlist* list, int n, int pos) /* 插入节点 */
{
int j;
if(pos < 0 || pos > list -> last )
    printf("所插入的位置超出顺序表的范围\n");
else
{
    for(j = list -> last; j >= pos; j--)/*逆向遍历顺序表*/
      list -> data = list -> data;/*元素后移*/
    list -> data = n;/*指向节点赋值*/
    list -> last++; /* 顺序表长度加1 */
}
}
/***************************删除结点***********************/
void DeleteNode(linearlist* list, int pos)/* 删除节点 */
{
int j;
if((pos < 0) || (pos > list -> last ))/* 删除位置超出顺序表的范围 */
    printf("所要删除的位置超出顺序表的范围\n");
else
{
    for(j = pos; j < list -> last; j++)/*遍历顺序表*/
      list -> data = list -> data;/*元素前移*/
    list -> last--; /* 顺序表长度减1 */
}
}
/**************************主函数************************/
int main()/* 主函数 */
{
int key, pos; /*key元素值,pos下标 */
char ch;
linearlist *list;
list = CreateList();/* 创建顺序表*/
while(1)
{
    Output(list);
    printf("请选择:");
    ch = getchar();/*接受选项*/
    fflush(stdin);/*清除缓存,enter会在缓存区域,所以要清空*/
    if(ch == 'a')/*追加*/
    {
      printf("请输入要追加的数据:");
      scanf("%d", &key);
      AppendNode(list, key);
    }
    else if(ch == 'i')/*插入*/
    {
      printf("请输入要插入的数据的位置:");
      scanf("%d", &pos);
      printf("请输入要插入的数据:");
      scanf("%d", &key);
      InsertNode(list, key, pos);
    }
    else if(ch == 'd')/*删除*/
    {
      printf("请输入要删除的数据的位置:");
      scanf("%d", &pos);
      DeleteNode(list, pos);
    }
    else if(ch == 'e')/*退出*/
      exit(0);
    Output(list);
    fflush(stdin);/*清除缓存*/
}
return 0;
}

凌风清羽 发表于 2016-5-22 16:55:50

以后每天一篇数据结构,哈哈~~{:5_197:}

吹口琴的钢铁侠 发表于 2016-5-23 17:40:22

这有什么用啊。。。没学过的根本看不懂,跟树莓派也没什么关系啊

dsweiliang 发表于 2016-6-3 09:34:31

学习学习
页: [1]
查看完整版本: 顺序表创建以及操作