温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

web中如何实现实现顺序表

发布时间:2021-10-21 11:10:56 来源:亿速云 阅读:171 作者:小新 栏目:编程语言

这篇文章主要为大家展示了“web中如何实现实现顺序表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中如何实现实现顺序表”这篇文章吧。

seqlist.h

#ifndef __SEQLIST_H__  #define __SEQLIST_H__       #include<stdio.h>   #include<stdlib.h>   #include<assert.h>      #define INIT_SIZE  2   #define ADD_SIZE 3   typedef int DataType;      typedef struct Seqlist   {       DataType *data;       int size;                         //当前空间存储的元素个数       int capacity;                     //当前空间所能存储的最大容量   }Seqlist,*pSeqlist;      void InitSeqlist(pSeqlist pSeq);   void DestorySeqlist(pSeqlist pSeq);   void PushBack(pSeqlist pSeq,DataType x);   void PopBack(pSeqlist pSeq);   void PushFront(pSeqlist pSeq,DataType x);   void PopFront(pSeqlist pSeq);   void Remove(pSeqlist pSeq,DataType x);   void RemoveAll(pSeqlist pSeq,DataType x);   void BubbleSort(pSeqlist pSeq);   void InsertSort(pSeqlist pSeq);   void SelectSort(pSeqlist pSeq);   int BinarySearch(pSeqlist pSeq,DataType x);   void  Erase(pSeqlist pSeq,int pos);   void PrintSeqlist(pSeqlist pSeq);      #endif             //SEQLIST_D_H__

seqist.c

#include"seqlist.h" void InitSeqlist(pSeqlist pSeq)                  {       pSeq->data = (DataType *)malloc(INIT_SIZE*sizeof(DataType));       if (pSeq->data == NULL)       {           printf("out of memory\n");           exit(1);       }       pSeq->size = 0;       pSeq->capacity = INIT_SIZE;     //将容量置为当前空间所能存储的最大值   }      void DestorySeqlist(pSeqlist pSeq)   {       free(pSeq->data);       pSeq->data = NULL;       pSeq->size = 0;       pSeq->capacity = 0;   }      void CheckCapacity(pSeqlist pSeq)       //查看当前空间是否已满   {       assert(pSeq);       if (pSeq->size == pSeq->capacity)    //如果满了则进行扩容       {           DataType *tmp = NULL;                                    tmp = (DataType *)realloc(pSeq->data, (pSeq->capacity += ADD_SIZE)*sizeof(DataType));           if (NULL == tmp)           {               printf("out of memory\n");               exit(1);           }           pSeq->data = tmp;       }   }      void PushBack(pSeqlist pSeq, DataType x)   {       assert(pSeq);       CheckCapacity(pSeq);                  //只要插入元素,首先就要检查空间是否以满       pSeq->data[pSeq->size++] = x;         //插入元素后size也要变化   }      void PopBack(pSeqlist pSeq)   {       assert(pSeq);       if (pSeq->size == 0)                   //异常情况,表已空       {           printf("表已空\n");           return;       }       pSeq->size--;   }      void PushFront(pSeqlist pSeq, DataType x)   {  int i = 0;     assert(pSeq);       CheckCapacity(pSeq);            //只要插入元素,首先就要检查空间是否以满             for (i = pSeq->size; i > 0; i--)   //从后往前先将数据移动       {           pSeq->data[i] = pSeq->data[i-1];       }       pSeq->data[0] = x;       pSeq->size++;   }      void PopFront(pSeqlist pSeq)   {   int i = 0;     assert(pSeq);     if (pSeq->size == 0)                     //异常情况,表空       {           printf("表已空\n");           return;       }       for (i = 0; i < pSeq->size-1; i++)        //直接从第二个元素依次向前覆盖       {           pSeq->data[i] = pSeq->data[i + 1];       }       pSeq->size--;   }      void Remove(pSeqlist pSeq, DataType x)       //删除第一个出现的x   {   int i = 0;       int j = 0;     assert(pSeq);        for (i = 0; i < pSeq->size; i++)       {           if (pSeq->data[i] == x)           {               for (j = i; j < pSeq->size-1; j++)      //删除的时候从这个元素的后面向前覆盖               {                   pSeq->data[j] = pSeq->data[j + 1];               }               pSeq->size--;               return;           }       }   }      void RemoveAll(pSeqlist pSeq, DataType x)   {   int i = 0;       int j = 0;     assert(pSeq);         for (i = 0; i < pSeq->size; i++)       {           if (pSeq->data[i] == x)           {               for (j = i; j < pSeq->size - 1; j++)      //删除的时候从这个元素的后面向前覆盖               {                   pSeq->data[j] = pSeq->data[j + 1];               }               pSeq->size--;           }       }   }      void BubbleSort(pSeqlist pSeq)   {   int flag = 0;       int i = 0;       int j = 0;       int k = pSeq->size-1;     assert(pSeq);     for (i = 0; i < pSeq->size - 1; i--)       {           int m = 0;           flag = 1;                               //将标记置1           for (j = 0; j < k; j++)           {               if (pSeq->data[j]>pSeq->data[j + 1])               {                   DataType tmp = pSeq->data[j];                   pSeq->data[j] = pSeq->data[j + 1];                   pSeq->data[j + 1] = tmp;                   flag = 0;                   m = j;                           //记录最后一次交换的位置               }           }           if (flag)               //标记位1表示已经有序           {               return;           }           m = k;                  //将k设置成最后一次交换的位置       }   }      void InsertSort(pSeqlist pSeq)                //插入排序   {   int i = 0;       int j = 0;      assert(pSeq);       for (i = 1; i < pSeq->size; i++)       {           DataType tmp = pSeq->data[i];           for (j = i-1; j >=0; j--)           {               if (pSeq->data[j]>tmp)             {                   pSeq->data[j+1] = pSeq->data[j];               }               else               {                   break;               }           }           pSeq->data[j+1] = tmp;     }   }      void SelectSort(pSeqlist pSeq)   {   int i = 0;       int j = 0;       int k = 0;       assert(pSeq);       for (i = 0; i < pSeq->size; i++)       {           k = i;           for (j = i + 1; j < pSeq->size; j++)           {               if (pSeq->data[k]>pSeq->data[j])               {                   k = j;             }           }           if (k != i)           {               DataType tmp = pSeq->data[k];               pSeq->data[k] = pSeq->data[i];               pSeq->data[i] = tmp;           }       }   }      int BinarySearch(pSeqlist pSeq, DataType x)   {   int left = 0;       int right = pSeq->size - 1; int mid=0;     assert(pSeq);       mid = (left&right) + ((left^right) >> 1);  //求平均值       while (left <= right)       {           if (pSeq->data[mid]>x)           {               right = mid - 1;           }           else if (pSeq->data[mid] < x)           {               left = mid + 1;           }           else           {               return mid;           }       }       return -1;   }      void  Erase(pSeqlist pSeq, int pos)   {   int i = 0;     assert(pSeq);        if (pos>= pSeq->size&&pos < 0)      {           printf("删除位置不合法\n");           return;       }       for (i = pos; i < pSeq->size - 1; i++)      //从pos之后依次向前覆盖       {           pSeq->data[i] = pSeq->data[i + 1];       }       pSeq->size--;   }      void PrintSeqlist(pSeqlist pSeq)   {        int i = 0; assert(pSeq);       if (pSeq->size == 0)       {           printf("表为空\n");           return;       }       for (i = 0; i < pSeq->size; i++)       {           printf("%d ", pSeq->data[i]);       }       printf("\n");   }

test.c

#include"seqlist.h"      void menu()   {       printf("0.exit            1.PrintSeqlist \n");       printf("2.InitSeqlist     3.PushBack     \n");       printf("4.Popback         5.PushFornt    \n");       printf("6.PopFornt        7.Erase        \n");       printf("8.Remove          9.RemoveAll    \n");       printf("10.BubbleSort     11.BinarySearch\n");       printf("12.DestorySeqlist 13.InsertSort  \n");       printf("14.SelectSort           \n");       printf("请输入:>");   }         void test(pSeqlist pSeq)   {       DataType x = 0;       int n = 0;       int pos = 0; int ret=0;     while (1)       {           menu();           scanf("%d", &n);           switch (n)           {           case 0:               exit(1);               break;           case 1:               PrintSeqlist(pSeq);               break;           case 2:               InitSeqlist(pSeq);               break;           case 3:               printf("请输入元素\n");               scanf("%d", &x);               PushBack(pSeq, x);               break;           case 4:               PopBack(pSeq);               break;           case 5:               printf("请输入元素\n");               scanf("%d", &x);               PushFront(pSeq, x);               break;           case 6:               PopFront(pSeq);               break;           case 7:               printf("请输入删除位置\n");               scanf("%d", &pos);               Erase(pSeq, pos);               break;           case 8:               printf("请输入元素\n");               scanf("%d", &x);               Remove(pSeq, x);               break;           case 9:               printf("请输入元素\n");               scanf("%d", &x);               RemoveAll(pSeq, x);               break;           case 10:               BubbleSort(pSeq);               break;           case 11:             printf("请输入元素\n");               scanf("%d", &x);               ret=BinarySearch(pSeq, x);               if (ret == -1)                   printf("没有这个元素\n");               printf("下标为:%d\n", ret);               break;           case 12:               DestorySeqlist(pSeq);               break;           case 13:               InsertSort(pSeq);               break;           case 14:               SelectSort(pSeq);               break;           default:               printf("输入无效\n");               break;           }       }   }            int main()   {       Seqlist pSeq;       test(&pSeq);       system("pause");       return 0;   }

以上是“web中如何实现实现顺序表”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

web
AI