zoukankan      html  css  js  c++  java
  • 数据结构笔记之—— 顺序表实现

    学习数据结构了,写下来,加深记忆。

    第一篇:

    //system("cls");  控制台屏幕刷新
    #include<stdio.h>
    #include<string.h>
    #include<malloc.h>
    #define MAXSIZE 100
    typedef int DataType;
    
    typedef struct
    {
    	DataType data[MAXSIZE];
    	int length;
    }SeqList;
    //初始化顺序表
    SeqList SeqListInit( )
    {
    	SeqList L;
    	//cout<<"线性表以创建"<<endl;
    	L.length = 0;
    	return L;
    }
    // 销毁顺序表
    SeqList ListClear(SeqList L)
    {
    	L.length=0;
    	//cout<<"线性表已销毁"<<endl;
    	return L;
    }
    //判断顺序表是否为空表
    int ListEmpty(SeqList L)
    {
    	return (L.length==0);
    }
    //判断顺序表是否为满
    int ListFull(SeqList L)
    {
    	return (L.length==MAXSIZE);
    }
    
    //求顺序表长度
    int ListLength(SeqList L)
    {
    	return L.length;
    }
    
    
    //从顺序表中查找元素
    DataType ListGet(SeqList L ,int i)
    {
    	if(i<0||i>L.length-1)
    		return -1;//  超出表范围,错误,返回-1
    	return L.data[i-1];//顺序表元素下标从0开始
    }
    
    //从顺序表中查找与给定元素值相同的元素在顺序表中的位置
    int ListLocate(SeqList L, DataType x)
    {
    	int i,mun = -1;
    	for(i = 0;i<L.length;i++)
    	{
    		if(L.data[i]==x)
    		{
    			mun = i;
    		}
    	}
    	if(mun==-1)
        {
            printf("当前顺序表没有元素 %d 
    ",x);
            return -1;
        }
        else
            return mun+1;
    }
    // 向顺序表中插入元素
    SeqList  ListInsert1(SeqList L,DataType x)
    {
        if(L.length==MAXSIZE)
            printf("表满,错误
    ");//  表满,返回错误
        L.length++;
        L.data[L.length-1] = x;
        return L;
    
    }
    SeqList  ListInsert(SeqList L,int i,DataType x)
    {
        int j;
    	if(L.length>MAXSIZE)
    		printf("表满,错误
    ");//  表满,返回错误
    
    	for(j = L.length-1;j>=i;j--)
    	{
    		L.data[j] = L.data[j-1];
    	}
    	L.length++;
    	L.data[i-1] = x;
    	return L;
    }
    
    /* 从顺序表中删除元素 */
    SeqList ListDelete(SeqList L,int i) //i 认为是逻辑结构的位置,即从1开始
    {
    	int j;
    	if(i<1||i>L.length)
        {
    		printf("错误
    ");//  表空,返回错误
            return;
        }
    	for(j = i;j<L.length;j++)
    		L.data[j-1] = L.data[j];
    	L.length--;
    	return L;
    }
    
    /*求顺序表中元素的前驱*/
    void ListPrior (SeqList L,DataType e)
    {
    	DataType i,k = -1;
    	if(L.data[0] == e)
        {
            printf("顺序表第一个元素没有前驱
    ");
            return ;//  顺序表第一个元素没有前驱
        }
    	for(i = 1;i<L.length;i++)
    		if(e == L.data[i])
    			k = i-1;
    	if(k==-1)
        {
            printf("顺序表中没有元素 %d 
    ",e);
            return ;
        }
        else
             printf("元素 %d  的前驱为 %d 
    ",e,L.data[k]);
    
    }
    /*求顺序表中元素的后继*/
    void ListNext(SeqList L,DataType e)
    {
    	DataType i,k = -1;
    	if(L.data[L.length-1] == e)
        {
            printf("顺序表最后一个元素没有后继 
    ");//  顺序表最后一个元素没有后继
            return ;
        }
    	for(i = 0;i<L.length-1;i++)
    		if(e == L.data[i])
    			k = i+1;
    	if(k==-1)
        {
            printf("顺序表中没有元素 %d 
    ",e);
            return ;
        }
        else
            printf("元素 %d  的后继为 %d 
    ",e,L.data[k]);
    }
    
    //输出顺序表(遍历顺序表 )
    void Prinlist(SeqList L)
    {
    	int i;
    	for(i = 0;i<L.length;i++)
    		printf("%d ",L.data[i]);
    	printf("
    ");
    }
    void mainScreen()
    {
        printf("请输入序号以使用以下功能 
    ");
        printf("0. 退出程序
    ");
        printf("1. 建立顺序表
    ");
        printf("2. 插入元素,输入元素 x 
    ");
        printf("3. 插入元素,输入元素 x , 插入位置 i 
    ");
        printf("4. 删除位置为 i 的元素
    ");
        printf("5. 判断顺序表是否为空 
    ");
        printf("6. 判断顺序表是否为满 
    ");
        printf("7. 查询顺序表长度 
    ");
        printf("8. 遍历顺序表 
    ");
        printf("9.  查询元素 x 位置 ,输入 x
    ");
        printf("10. 查询位置为 i 元素,输入 i 
    ");
        printf("11.  查询元素 x 的前驱,输入 x 
    ");
        printf("12. 查询元素 x 的后继,输入 x 
    ");
        printf("13. 销毁顺序表
    ");
        printf("__________________________________________
    ");
    
    }
    int main()
    {
    
    	int n,x,i,tem;
    	mainScreen();
    	SeqList L;
    	while(scanf("%d",&n)&&n!=0)
        {
            switch(n)
            {
                case 1: system("cls");
                        L = SeqListInit();
                        printf("顺序表已经建立!!
    ");
                        //printf("输入 任意数字 返回主菜单
    ");
                        //scanf("%d",&temp);
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 2: system("cls");
                        printf("插入元素,请输入元素 x ");
                        scanf("%d",&x);
                        L = ListInsert1(L,x);
                        printf("元素 %d 已插入 
    ",x);
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 3: system("cls");
                        printf("插入元素,请输入元素 x 及序号 i ");
                        scanf("%d%d",&x,&i);
                        L = ListInsert(L,x,i);
                        printf("元素 %d 已插入 
    ",x);
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 4: system("cls");
                        printf("删除位置为 i 的元素,请输入 i ");
                        scanf("%d",&i);
                        int tem = L.length;
                        L = ListDelete(L,i);
                        if(tem==L.length)
                        {
                            getchar();
                            getchar();
                            system("cls");
                            mainScreen();
                            continue;
    
                        }
                        else
                        {
                            printf("%d 位置已删除 
    ",i);
                            getchar();
                            getchar();
                            system("cls");
                            mainScreen();
                            break;
                        }
                case 5: system("cls");// empty
                        if(ListEmpty(L))
                            printf("顺序表为空!!
    ");
                        else
                            printf("顺序表不为空!!
    ");
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 6: system("cls");//  full
                        if(ListFull(L))
                            printf("顺序表为满!!
    ");
                        else
                            printf("顺序表不为满!!
    ");
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 7: system("cls");
                        x = ListLength(L);
                        printf("顺序表长度为 %d 
    ",x);
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 8: system("cls");
                        printf("遍历顺序表
    ");
                        Prinlist(L);
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 9 :system("cls");
                        printf("查询元素 x 位置 ,输入 x");
                        scanf("%d",&x);
                        i = ListLocate(L,x);
                        printf("元素 %d 位置为 %d 
    ",x,i );
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 10:system("cls");
                        printf("查询位置为 i 元素,输入 i ");
                        scanf("%d",&i);
                        x = ListGet(L,i);
                        printf("位于位置 %d 的元素为为 %d 
    ",i,x);
                        getchar();
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 11: system("cls");
                        printf("查询元素 x 的前驱, 请输入 x ");
                        scanf("%d",&x);
                        ListPrior(L,x);
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 12:system("cls");
                        printf("查询元素 x 的后继, 请输入 x ");
                        scanf("%d",&x);
                        ListNext(L,x);
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                case 13:system("cls");
                        printf("销毁顺序表 ");
                        L = ListClear(L);
                        printf("顺序表已销毁 ");
                        getchar();
                        system("cls");
                        mainScreen();
                        break;
                default:printf("error");break;
            }
        }
    	return 0;
    }
    


  • 相关阅读:
    一千亿亿亿字节
    分布式发布订阅消息系统
    Google Chrome 的内核引擎 WebKit 介绍
    找项目网站C# 下写入视频的简单实现
    学ios开发:Delegate,Action Sheet, Alert
    Web服务器
    Google Chrome Source Code 源码下载
    大数据处理的趋势五种开源技术介绍
    MDA项目思路小结
    重新发布本人所有博客文章中涉及的代码与工具(大部分是C++和Java)
  • 原文地址:https://www.cnblogs.com/gray1566/p/3704311.html
Copyright © 2011-2022 走看看