91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言順序表的代碼怎么寫

發布時間:2022-10-17 16:08:17 來源:億速云 閱讀:123 作者:iii 欄目:編程語言

今天小編給大家分享一下C語言順序表的代碼怎么寫的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

sqlist.h

//#pragma once
//#define N 1000
//typedef int SeqListDataType;
//
//靜態順序表,太死了 滿了就插不進去了,空間太大用不完就會浪費
//typedef struct SeqList
//{
//     SeqListDataType a[N];
//     int size;//表示數組中存了多少個數據
//}SeqList;
//
//void SeqListInit(SeqList* ps);
//void SeqListPushBack(struct SeqList*pc,SeqListDataType x );
//void SeqListPopBack(SeqList* ps);
//void SeqListPushFront(struct SeqList*pc,SeqListDataType x );
//void SeqListPopFront(SeqList* ps);
//動態順序表
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef int SeqListDataType;
typedef struct SeqList//凡是多個數據的存儲上我們之前學的結構體
{
       SeqListDataType* a;
       int size;//表示數組中已經存了多少個數據
       int capacity;//數組能存實際空間容量有多大,數據個數,單位個數,  可以方便寫擴容函數
}SeqList;//固定格式 ,通過結構體建立一個順序表
//接口函數,定義一些函數 增刪查改
//命名風格跟著STL走  STL是C++的一個庫
void SeqListInit(SeqList* ps);//初始化
void SeqListPushBack(struct SeqList*ps,SeqListDataType x );//尾插
void SeqListPopBack(SeqList* ps);//尾刪
void SeqListPushFront(struct SeqList*ps,SeqListDataType x );//頭插
void SeqListPopFront(SeqList* ps);//頭刪
void SeqListPrint(SeqList* ps);
void SeqListDestory(SeqList* ps);
int SeqListFind(SeqList* ps,SeqListDataType x); //找到返回下標,沒找到返回-1
void SeqListInsert(SeqList* ps,int pos,SeqListDataType x); //在pos 下標位置插入
void SeqListDelete(SeqList* ps,int pos);//在pos 下標位置刪除

sqlist.c

#include "Seqlist.h"
#include "assert.h"
//函數傳參,形參是是實參的拷貝,形參的改變不會影響實參,然后通過地址對結構體里面的內容做修改,所以PS這個可以換成任意字母,這只是一個符號
//(1)& 運算符 :用于取一個對象的地址
//(2)* 運算符:作用于指針時表示訪問指針所指向的對象
void SeqListInit(SeqList* ps)//線性表初始化函數
{
       ps->a=NULL;
       ps->capacity=0;
       ps->size=0;
}
void SeqListPushBack(struct SeqList*ps,SeqListDataType x )//尾插
{
       if(ps->size==ps->capacity)//擴容開始
       {
              int newcapacity=ps->capacity==0?4:ps->capacity*2;//如果是0就給4,如果不是0,就給2倍
              SeqListDataType*tmp=(SeqListDataType*)realloc(ps->a,newcapacity*sizeof(SeqListDataType));//realloc對原有的空間擴容,如果原來的空間是空,則功能和mealloc相同
              if(tmp==NULL)
              {
                     printf("realloc fail\n");
                     exit(-1);//直接終止程序
              }
              ps->a=tmp;
              ps->capacity=newcapacity;
       }//擴容結束
       
       
       ps->a[ps->size]=x;//數據的size從0開始,所以此時是size-1,正好現在還有空間,直接將x放到數組里面,數組的位置是在ps->size這里。
       ps->size=ps->size+1;
}
void SeqListPrint(SeqList* ps)
{
       int i=0;
       for(i=0;i<ps->size;i=i+1)
       {
              printf("%d ",ps->a[i]);
       }
       printf("\n");
}
void SeqListDestory(SeqList* ps)
{
       free(ps->a);
       ps->a=NULL;
       ps->capacity=0;
       ps->size=0;
}
//這里有一個問題,如果只插入兩個數,但刪除3個數的時候,編譯器沒法識別出來,沒法報錯,所以不能直接ps->size--,我們需要用如下的方法
void SeqListPopBack(SeqList* ps)//從線性表后面刪除元素
{
       if(ps->size>0)
       {
              ps->a[ps->size-1]=0;
              ps->size=ps->size-1;
       }
       /*assert(pd->size >0);斷言,斷言是如果括號后面條件為真則沒事,否則則條件為假
       ps->size--;*/
}
void SeqListPushFront(struct SeqList*ps,SeqListDataType x )//頭插,要考慮擴容的問題,數據的要從最后一個開始往后挪size+1
{
       //int end=ps->size-1;//下標是最后一個數的下一個位置
       //if(ps->size==ps->capacity)
       //{
       //     int newcapacity=ps->capacity==0?4:ps->capacity*2;
       //     SeqListDataType*tmp=(SeqListDataType*)realloc(ps->a,newcapacity*sizeof(SeqListDataType));
       //     if(tmp==NULL)
       //     {
       //            printf("realloc fail\n");
       //            exit(-1);//直接終止程序
       //     }
       //     ps->a=tmp;
       //     ps->capacity=newcapacity;
              /*}*/
        SeqListInsert(ps,0, x);//改進  服用了下標插入函數
       
       //挪動數據
       /*while(end>=0)
       {
              ps->a[end+1]=ps->a[end];
              --end;
       }
       ps->a[0]=x;
       ps->size++;*/
       }
void SeqListPopFront(SeqList* ps)//頭刪
{
       int begin=1;
       assert(ps->size>0);
       
       while(begin<ps->size)
       {
              ps->a[begin-1]=ps->a[begin];
              ++begin;
       }
}
int SeqListFind(SeqList* ps,SeqListDataType x)//找到返回下標,沒找到返回-1
{
       int i=0;
       for(i=0;i<=ps->size;i++)
       {
              if(ps->a[i]==x)
              {
                     return i;
              }
       }
       return -1;
}
void SeqListInsert(SeqList* ps,int pos,SeqListDataType x)//在pos 下標位置插入
{
       int end=0;
       /*if(pos>ps->size || pos<0)
       {
              printf("pos invalid\n");
              return;
       }*/
       assert(pos>=0 && pos<=ps->size);
       if(ps->size==ps->capacity)//擴容開始
       {
              int newcapacity=ps->capacity==0?4:ps->capacity*2;//如果是0就給4,如果不是0,就給2倍
              SeqListDataType*tmp=(SeqListDataType*)realloc(ps->a,newcapacity*sizeof(SeqListDataType));//realloc對原有的空間擴容,如果原來的空間是空,則功能和mealloc相同
              if(tmp==NULL)
              {
                     printf("realloc fail\n");
                     exit(-1);//直接終止程序
              }
              ps->a=tmp;
              ps->capacity=newcapacity;
       }//擴容結束
              
               end=ps->size-1;
       //挪動數據
              while(end>=pos)
              {
                     ps->a[end+1]=ps->a[end];
                     --end;
              }
              ps->a[pos]=x;
              ps->size ++;
}
void SeqListDelete(SeqList* ps,int pos)
{
       
       int begin=0;
       assert(pos>=0 && pos<=ps->size);
        begin=pos+1;
       while(begin<ps->size)
       {
              ps->a[begin-1]=ps->a[begin];
              ++begin;
       }
       ps->size++;
}

test.c

#include "Seqlist.h"
#include "assert.h"
//void TestSeqList1()
//{
//     SeqList S1;
//     SeqListInit(&S1);
//      SeqListPushBack(&S1,1);
//      SeqListPushBack(&S1,2);
//      SeqListPushBack(&S1,3);
//      SeqListPushBack(&S1,4);
//      SeqListPushBack(&S1,5);
//      SeqListPushBack(&S1,6);
//      SeqListPrint(&S1);
//       
//      
//      SeqListPushFront(&S1,20);//頭插
//       SeqListPrint(&S1);
//       
//       SeqListPopFront(&S1);
//        SeqListPrint(&S1);
//        
//        
//        SeqListPopFront(&S1);
//        SeqListPrint(&S1);
//
//        SeqListDestory(&S1);
//}
//
//void TestSeqList2()
//{
//      int pos=0;   
//     SeqList S2;
//            SeqListInit(&S2);
//            SeqListPushBack(&S2,1);
//      SeqListPushBack(&S2,2);
//      SeqListPushBack(&S2,3);
//      SeqListPushBack(&S2,4);
//      SeqListPushBack(&S2,5);
//      SeqListPushBack(&S2,6);
//      SeqListPrint(&S2);
//      SeqListInsert(&S2,2,200);
//      SeqListPrint(&S2);
//     
//      pos=SeqListFind(&S2,4);
//      if(pos!=-1)
//      {
//             SeqListInsert(&S2,5,700);
//      
//      }
//      
//      SeqListPushFront(&S2,-1 );
//      SeqListPrint(&S2);
//      SeqListDelete(&S2,3);
//      SeqListPrint(&S2);
//      SeqListDestory(&S2);
//}
void menu()
{
       printf("*****************************************\n");
       printf("請輸入值:\n");
       printf("1、頭插    2、尾插  \n  ");
       printf("1、頭刪    2、尾刪  \n  ");
       printf("*****************************************\n");
       
}
int main()
{
       int i=0;
       /*TestSeqList1();*/
       /*TestSeqList2();*/
       
       while(i!=-1)
       {
       SeqList S1;
       SeqListInit(&S1);
       SeqListPushBack(&S1,1);
       SeqListPushBack(&S1,2);
       SeqListPushBack(&S1,3);
       SeqListPushBack(&S1,4);
        SeqListPrint(&S1);
       menu();
       scanf("%d",&i);
              switch(i)
       {
       case 1:
              SeqListPushFront(&S1,20);
               SeqListPrint(&S1);
               break;
       case 2:
              SeqListPushBack(&S1,1);
               SeqListPrint(&S1);
                break;
       case 3:
              SeqListPopFront(&S1);
               SeqListPrint(&S1);
                break;
       case 4:
              SeqListPopBack(&S1);
               SeqListPrint(&S1);
                break;
       
       }
       
       
}
       /*if(i=1)
       {
              SeqListPushFront(&S1,20);
               SeqListPrint(&S1);
       }
       else if(i=2)
       {
              SeqListPushBack(&S1,1);
               SeqListPrint(&S1);
       }
       else if(i=3)
       {
              SeqListPopFront(&S1);
               SeqListPrint(&S1);
       }
       else if(i=4)
       {
              SeqListPopBack(&S1);
               SeqListPrint(&S1);
       }*/
       return 0;
}

以上就是“C語言順序表的代碼怎么寫”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西盟| 云龙县| 竹北市| 蚌埠市| 宜章县| 邵阳县| 沂水县| 云和县| 清水县| 灵川县| 盐城市| 保山市| 闸北区| 荥经县| 台中县| 南安市| 贵定县| 建平县| 临沭县| 潜江市| 贵阳市| 壤塘县| 富平县| 城固县| 昌宁县| 道孚县| 重庆市| 高邮市| 平定县| 东辽县| 沧源| 于田县| 兰州市| 三河市| 阿克苏市| 洪雅县| 婺源县| 武川县| 静宁县| 万山特区| 阿拉善盟|