C 언어 는 순서 표 의 첨삭 과 수정, 정렬 을 실현 한다.

순서 표 는 선형 표 중의 중요 한 데이터 구조 이자 가장 기본 적 인 데이터 구조 이다. 오늘 나 는 C 언어 로 하 선형 표 의 기본 조작 을 실현 하고 거품 정렬 과 선택 정렬 이 선형 표 에서 의 알고리즘 실천 을 실현 한다. 코드 는 다음 과 같다.
seqlist.h:
#ifndef __SEQLIST__
#define __SEQLIST__
#define MAX 5
#include <stdlib.h>
typedef int DataType;
typedef struct SeqList
{
DataType array[MAX];
size_t size;
}SeqList;
void PrintSeqList(SeqList* pSeq);
void InitSeqList(SeqList* pSeq);
void PushBack(SeqList* pSeq,DataType x);
void PopBack(SeqList* pSeq);
void PushFront(SeqList* pSeq,DataType x);
void PopFront(SeqList* pSeq);
void Insert(SeqList* pSeq, size_t pos, DataType x);
int Find(SeqList* pSeq, DataType x);
void Erase(SeqList* pSeq, size_t pos);
void Remove(SeqList* pSeq, DataType x);
void RemoveAll(SeqList* pSeq, DataType x);
void BubbleSort(SeqList* pSeq);
void SeclectSort(SeqList* pSeq);
#endif

SeqList.c:
#include "Seqlist.h"
#include <assert.h>
#include <stdio.h>
void static Swap(DataType *left, DataType *right)//         
{
DataType tmp = *left;
*left = *right;
*right = tmp;
}
void PrintSeqList(SeqList* pSeq)//        
{
assert(pSeq);
size_t i = 0;
if (pSeq->size == 0)
{
printf("     
"); return; } for (; i < pSeq->size; i++) { printf("%d ", pSeq->array[i]); } printf("
"); return; } void InitSeqList(SeqList* pSeq)// { assert(pSeq); pSeq->size = 0; } void PushBack(SeqList* pSeq, DataType x)// { assert(pSeq); if (pSeq->size == MAX) { printf("
"); return; } pSeq->array[pSeq->size++] = x; return; } void PopBack(SeqList* pSeq)// { assert(pSeq); if (pSeq->size == 0) { printf(" ,
"); return; } pSeq->size--; return; } void PushFront(SeqList* pSeq, DataType x)// { size_t i = pSeq->size; assert(pSeq); if (pSeq->size == MAX) { printf("
"); return; } for (; i>0; i--) { pSeq->array[i] = pSeq->array[i-1]; } pSeq->array[i] = x; pSeq->size++; return; } void PopFront(SeqList* pSeq)// { size_t i = 0; assert(pSeq); if (pSeq->size == 0) { printf("
"); return; } for (; i<pSeq->size-1; i++) { pSeq->array[i+1] = pSeq->array[i]; } pSeq->size--; return; } void Insert(SeqList* pSeq,size_t pos,DataType x)// { assert(pSeq); size_t i = pSeq->size; if (pSeq->size == MAX) { printf(" ,
"); return; } for (; i >=pos-1; i--) { pSeq->array[i] = pSeq->array[i - 1]; } pSeq->array[pos - 1] = x; pSeq->size++; } int Find(SeqList* pSeq, DataType x)// { assert(pSeq); size_t i = 0; for (; i < pSeq->size; i++) { if (pSeq->array[i] == x) return i+1; } return -1; } void Erase(SeqList* pSeq, size_t pos )// { assert(pSeq); if (pSeq->size == 0) { printf(" ,
"); return; } if (pos > pSeq->size) { printf(" ,
"); return; } size_t i = pos-1; for (; i <pSeq->size; i++) { pSeq->array[i] = pSeq->array[i+1]; } pSeq->size--; } void Remove(SeqList* pSeq, DataType x)// { Erase(pSeq, Find(pSeq,x)); } void RemoveAll(SeqList* pSeq, DataType x)// { assert(pSeq); size_t i = 0;  size_t count = 0; for (; i < pSeq->size; i++) { if (pSeq->array[i] == x) { count++; } else { pSeq->array[i - count] = pSeq->array[i]; } } pSeq->size -= count; } void BubbleSort(SeqList* pSeq)// { assert(pSeq); size_t i = 0; size_t j = 0; for (; i < pSeq->size; i++) { for (j = 0; j < pSeq->size - i -1; j++) { if (pSeq->array[j]>pSeq->array[j + 1]) { Swap(&pSeq->array[j], &pSeq->array[j + 1]); } } } } void SeclectSort(SeqList* pSeq)// { size_t min; size_t i = 0; size_t j = 0; for (; i < pSeq->size; i++) { min = i; for (j = min; j < pSeq->size; j++) { if (pSeq->array[min]>pSeq->array[j]) { min = j; } } Swap(&pSeq->array[i], &pSeq->array[min]); } }

테스트 코드:
#include <stdio.h>
#include "Seqlist.h"
void test1(SeqList*pSeq)//    
{
InitSeqList(pSeq);
PrintSeqList(pSeq);
PushBack(pSeq, 1);
PushBack(pSeq, 2);
PushBack(pSeq, 3);
PushBack(pSeq, 4);
PushBack(pSeq, 5);
PushBack(pSeq, 5);
PrintSeqList(pSeq);
PopBack(pSeq);
PopBack(pSeq);
PopBack(pSeq);
PopBack(pSeq);
PopBack(pSeq);
PopBack(pSeq);
PrintSeqList(pSeq);
PushFront(pSeq, 5);
PushFront(pSeq, 4);
PushFront(pSeq, 3);
PushFront(pSeq, 2);
PushFront(pSeq, 1);
PushFront(pSeq, 1);
PrintSeqList(pSeq);
}
void test2(SeqList*pSeq)
{
InitSeqList(pSeq);
PushBack(pSeq, 1);
PushBack(pSeq, 2);
PushBack(pSeq, 3);
PushBack(pSeq, 4);
PushBack(pSeq, 5);
PrintSeqList(pSeq);
PopFront(pSeq);
PopFront(pSeq);
PopFront(pSeq);
PopFront(pSeq);
PopFront(pSeq);
PopFront(pSeq);
}
void test3(SeqList*pSeq)
{
InitSeqList(pSeq);
PushBack(pSeq, 1);
PushBack(pSeq, 3);
PushBack(pSeq, 4);
PushBack(pSeq, 5);
PrintSeqList(pSeq);
Insert( pSeq,2,2);
PrintSeqList(pSeq);
Insert(pSeq, 2, 2);
}
void test4(SeqList*pSeq)
{
InitSeqList(pSeq);
PushBack(pSeq, 1);
PushBack(pSeq, 2);
PushBack(pSeq, 3);
PushBack(pSeq, 4);
PushBack(pSeq, 5);
PrintSeqList(pSeq);
Erase(pSeq, 2);
PrintSeqList(pSeq);
Erase(pSeq, 5);
PrintSeqList(pSeq);
}
void test5(SeqList*pSeq)
{
InitSeqList(pSeq);
PushBack(pSeq, 1);
PushBack(pSeq, 2);
PushBack(pSeq, 3);
PushBack(pSeq, 1);
PushBack(pSeq, 5);
PrintSeqList(pSeq);
RemoveAll(pSeq, 1);
PrintSeqList(pSeq);
}
void test6(SeqList*pSeq)//      
{
InitSeqList(pSeq);
PushBack(pSeq, 2);
PushBack(pSeq, 4);
PushBack(pSeq, 3);
PushBack(pSeq, 1);
PushBack(pSeq, 5);
PrintSeqList(pSeq);
BubbleSort(pSeq);
PrintSeqList(pSeq);
}
void test7(SeqList*pSeq)
{
InitSeqList(pSeq);
InitSeqList(pSeq);
PushBack(pSeq, 2);
PushBack(pSeq, 4);
PushBack(pSeq, 3);
PushBack(pSeq, 1);
PushBack(pSeq, 5);
PrintSeqList(pSeq);
SeclectSort(pSeq);
PrintSeqList(pSeq);
}
int main()
{
SeqList SL;
test1(&SL);
test2(&SL);
test3(&SL);
printf("%d
", Find(&SL, 5)); test4(&SL); test5(&SL); test6(&SL); test7(&SL); system("pause"); return 0; }

    만약 부족 하 다 면 비판 과 시정 을 바 랍 니 다.

좋은 웹페이지 즐겨찾기