民治做網(wǎng)站的公司平臺怎么推廣技巧
目錄
第一題 順序表的初始化,銷毀,頭插,尾插,頭刪,尾刪,指定位置插入,指定刪除以及打印
第二題 移除元素
題目鏈接:?OJ鏈接
題目詳解:移除元素?
第三題:刪除有序數(shù)組中的重復項
題目鏈接:OJ鏈接?
第一題 順序表的初始化,銷毀,頭插,尾插,頭刪,尾刪,指定位置插入,指定刪除以及打印
//SL.h
#pragma oncetypedef int SLDataType;typedef struct SeqList
{SLDataType* a;int size;int capacity;
}SL;//初始化
void SLInit(SL* psl);
//銷毀
void SLDestory(SL* psl);
//打印函數(shù)
void SLPrint(SL* psl);
//擴容函數(shù)
void SLCheckCapacity(SL* psl);
//尾插
void SLPushBack(SL* psl, SLDataType x);
//頭插
void SLPushFront(SL* psl, SLDataType x);
//尾刪
void SLPopBack(SL* psl);
//頭刪
void SLPopFront(SL* psl);
//指定位置出入
void SLInsert(SL* psl, int pos,SLDataType x);
//制定位置刪除
void SLErase(SL* psl, int pos);
//查找
int SLFind(SL* psl, SLDataType x);//SL.c
#define _CRT_SECURE_NO_WARNINGS
#include"SL.h"
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<assert.h>//初始化
void SLInit(SL* psl)
{psl->a = NULL;psl->size = 0;psl->capacity = 0;
}
//銷毀
void SLDestory(SL* psl)
{assert(psl->a);free(psl->a);psl->a = NULL;psl->size = 0;psl->capacity = 0;
}
//打印函數(shù)
void SLPrint(SL* psl)
{assert(psl);for(int i=0;i<psl->size;i++){printf("%d ", psl->a[i]);}printf("\n");
}
//擴容函數(shù)
void SLCheckCapacity(SL* psl)
{assert(psl);if(psl->size==psl->capacity) //當最后一個元素的下一個位置等于容量,即滿了時要擴容{int newcapacity = psl->capacity == 0 ? 4 : psl->capacity * 2; // 如果容量為0的話先賦初值為4,否則擴2倍SLDataType* tmp = (SLDataType*)realloc(psl->a, sizeof(SLDataType) * newcapacity); //用指針指向新地址,//realloc(a,b);第一個參數(shù)a是擴容前的原地址,b是擴容大小。擴容的容量大小是Int型用sizeof(SLDataType)求得數(shù)據(jù)類型所占字節(jié)子在成容量,是開辟新空間所占的字節(jié)數(shù)if(tmp==NULL){perror("realloc fail");return 0;}psl->a = tmp;//將新空間賦給原地址,如果不引用tmp,如果擴容失敗會導致原地址也消失psl->capacity = newcapacity;}}
//尾插
void SLPushBack(SL* psl, SLDataType x)
{assert(psl); //指針不能為空NULLSLCheckCapacity(psl);psl->a[psl->size] = x;//順序表是在size插入數(shù)據(jù)psl->size++;
}
//頭插
void SLPushFront(SL* psl, SLDataType x)
{assert(psl);SLCheckCapacity(psl);int end = psl->size - 1;while(end>=0){psl->a[end + 1] = psl->a[end];end--;}psl->a[0] = x;psl->size++;
}
//尾刪
void SLPopBack(SL* psl)
{assert(psl);assert(psl->size > 0);psl->size--; //size--,直接覆蓋前一個,不用free()
}
//頭刪
void SLPopFront(SL* psl)
{assert(psl);assert(psl->size > 0);int begin = 0;while (begin < psl->size) // 向前覆蓋{psl->a[begin] = psl->a[begin + 1];begin++;}psl->size--; //size--
}
//指定位置插入
void SLInsert(SL* psl, int pos, SLDataType x)
{assert(psl);assert(pos >=0 && pos <=psl->size );SLCheckCapacity(psl);int end = psl->size - 1;while(end>=pos){psl->a[end + 1] = psl->a[end];end--;}psl->a[pos] = x;psl->size++;}
//指定位置刪除
void SLErase(SL* psl, int pos)
{assert(psl);assert(pos >= 0 && pos <= psl->size);while(pos<=psl->size-1){psl->a[pos] = psl->a[pos + 1];pos++;}psl->size--;
}
//查找
int SLFind(SL* psl, SLDataType x)
{assert(psl);assert(psl->size > 0);for(int i=0;i<psl->size-1;i++){if(psl->a[i]==x){return i;}}
}//test.c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include"SL.h"
void text1()
{SL sl; //SL 結構體類型,sl是結構體變量SLInit(&sl); //初始化SLPushBack(&sl,1); //將變量sl指向的空間傳遞給形參,這樣形參可以改變實參SLPushBack(&sl,2);SLPushBack(&sl,3);SLPushBack(&sl,4);SLPushBack(&sl,5);SLPrint(&sl);SLPushFront(&sl, 0);SLPushFront(&sl, -1);SLPushFront(&sl, -2);SLPushFront(&sl, -3);SLPrint(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPrint(&sl);SLInsert(&sl, 2, 3);SLPrint(&sl);SLErase(&sl, 2);SLPrint(&sl);int t= SLFind(&sl, -1);SLErase(&sl, t);SLPrint(&sl);SLDestory(&sl);SLPrint(&sl);
}
int main()
{text1();/*printf("%d", sizeof(int));*/return 0;
}
第二題 移除元素
給你一個數(shù)組?nums
?和一個值?val
,你需要?原地?移除所有數(shù)值等于?val
?的元素,并返回移除后數(shù)組的新長度。
不要使用額外的數(shù)組空間,你必須僅使用?O(1)
?額外空間并?原地?修改輸入數(shù)組。
元素的順序可以改變。你不需要考慮數(shù)組中超出新長度后面的元素。
int removeElement(int* nums, int numsSize, int val){int left = 0;int right = 0;while(right<numsSize){if(nums[right]!=val){nums[left]=nums[right];left++;right++;}else{right++;}}return left;
}
題目鏈接:?OJ鏈接
題目詳解:移除元素?
第三題:刪除有序數(shù)組中的重復項
給你一個?非嚴格遞增排列?的數(shù)組?nums
?,請你?原地?刪除重復出現(xiàn)的元素,使每個元素?只出現(xiàn)一次?,返回刪除后數(shù)組的新長度。元素的?相對順序?應該保持?一致?。然后返回?nums
?中唯一元素的個數(shù)。
考慮?nums
?的唯一元素的數(shù)量為?k
?,你需要做以下事情確保你的題解可以被通過:
- 更改數(shù)組?
nums
?,使?nums
?的前?k
?個元素包含唯一元素,并按照它們最初在?nums
?中出現(xiàn)的順序排列。nums
?的其余元素與?nums
?的大小不重要。 - 返回?
k
?。
題目鏈接:OJ鏈接?
非嚴格遞增的含義:
后面都大于等于前者,不會小于前者
如 123345,是非嚴格遞增,123342不是非嚴格遞增
思路雙指針:
int removeDuplicates(int* nums, int numsSize) {int slow=0;int fast=1;while(fast<numsSize){if(nums[fast]!=nums[slow]){slow++;nums[slow]=nums[fast];fast++;}else{fast++;}}return slow+1;
}
?
?