华中科技大学
教师:刘干
01 顺序表去除重复节点
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int data;
}ElemType,*ELemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
void InitList_SqList(SqList* L);
void Build(SqList* L);
void function1(SqList* L);
void display(SqList* L);
void InitList_SqList(SqList* L){
L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (L->elem == NULL) {
// 如果内存分配失败,打印错误信息并退出程序
printf("Memory allocation failed!\n");
exit(EXIT_FAILURE); // 使用exit函数退出程序,返回非零状态码表示错误
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
}
void Build(SqList* L){
int i,j;
printf("请输入您想输入的元素个数:");
scanf("%d",&i);
L->length=i;
for(j=0;j<i;j++){
int k;
printf("\n请输入第%d个数:",j+1);
scanf("%d",&k);
L->elem[j].data=k;
}
}
void function1(SqList* L){
int i;
for(i=0;i<L->length-1;i++){
if(L->elem[i+1].data==L->elem[i].data){
for(int j=i;j<L->length-1;j++){
L->elem[j].data=L->elem[j+1].data;
}
L->length--;
i--
;
}
}
}
void display(SqList* L){
int i=0;
for(i;i<L->length;i++){
printf("%d ",L->elem[i].data);
}
printf("\n");
}
int main(){
SqList A;
InitList_SqList(&A);
Build(&A);
display(&A);
function1(&A);
display(&A);
}
02 顺序表排除所有为0的元素
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int data;
}ElemType,*ELemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
void InitList_SqList(SqList* L);
void Build(SqList* L);
void function1(SqList* L);
void display(SqList* L);
void InitList_SqList(SqList* L){
L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (L->elem == NULL) {
// 如果内存分配失败,打印错误信息并退出程序
printf("Memory allocation failed!\n");
exit(EXIT_FAILURE); // 使用exit函数退出程序,返回非零状态码表示错误
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
}
void Build(SqList* L){
int i,j;
printf("请输入您想输入的元素个数:");
scanf("%d",&i);
L->length=i;
for(j=0;j<i;j++){
int k;
printf("\n请输入第%d个数:",j+1);
scanf("%d",&k);
L->elem[j].data=k;
}
}
void function1(SqList* L){
int i;
for(i=0;i<L->length-1;i++){
if(L->elem[i].data==0){
for(int j=i;j<L->length-1;j++){
L->elem[j].data=L->elem[j+1].data;
}
L->length--;
i--;
}
}
if(L->elem[L->length-1].data==0)L->length--;
}
void display(SqList* L){
int i=0;
for(i;i<L->length;i++){
printf("%d ",L->elem[i].data);
}
printf("\n");
}
int main(){
SqList A;
InitList_SqList(&A);
Build(&A);
display(&A);
function1(&A);
display(&A);
}
03顺序表冒泡排序
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int data;
}ElemType,*ELemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
void InitList_SqList(SqList* L);
void Build(SqList* L);
void function1(SqList* L);
void display(SqList* L);
void InitList_SqList(SqList* L){
L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (L->elem == NULL) {
// 如果内存分配失败,打印错误信息并退出程序
printf("Memory allocation failed!\n");
exit(EXIT_FAILURE); // 使用exit函数退出程序,返回非零状态码表示错误
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
}
void Build(SqList* L){
int i,j;
printf("请输入您想输入的元素个数:");
scanf("%d",&i);
L->length=i;
for(j=0;j<i;j++){
int k;
printf("\n请输入第%d个数:",j+1);
scanf("%d",&k);
L->elem[j].data=k;
}
}
void function1(SqList* L){
int i,j,temp;
for(i=0;i<L->length-1;i++){
int count=0;
for(j=0;j<L->length-1-i;j++){
if(L->elem[j].data>L->elem[j+1].data){
temp=L->elem[j].data;
L->elem[j].data=L->elem[j+1].data;
L->elem[j+1].data=temp;
count=1;
}
}
if(count=0)break;
}
}
void display(SqList* L){
int i=0;
for(i;i<L->length;i++){
printf("%d ",L->elem[i].data);
}
printf("\n");
}
int main(){
SqList A;
InitList_SqList(&A);
Build(&A);
display(&A);
function1(&A);
display(&A);
}
04顺序表插入排序
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int data;
}ElemType,*ELemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
void InitList_SqList(SqList* L);
void Build(SqList* L);
void function1(SqList* L);
void display(SqList* L);
void InitList_SqList(SqList* L){
L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (L->elem == NULL) {
// 如果内存分配失败,打印错误信息并退出程序
printf("Memory allocation failed!\n");
exit(EXIT_FAILURE); // 使用exit函数退出程序,返回非零状态码表示错误
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
}
void Build(SqList* L){
int i,j;
printf("请输入您想输入的元素个数:");
scanf("%d",&i);
L->length=i;
for(j=0;j<i;j++){
int k;
printf("\n请输入第%d个数:",j+1);
scanf("%d",&k);
L->elem[j].data=k;
}
}
void function1(SqList* L){
int i,j,flag;
for(i=1;i<L->length;i++){
flag=L->elem[i].data;
for(j=i-1;j>=0&&L->elem[j].data>flag;j--){
L->elem[j+1].data=L->elem[j].data;
}
}
L->elem[j+1].data=flag;
}
void display(SqList* L){
int i=0;
for(i;i<L->length;i++){
printf("%d ",L->elem[i].data);
}
printf("\n");
}
int main(){
SqList A;
InitList_SqList(&A);
Build(&A);
display(&A);
function1(&A);
display(&A);
}
05顺序表选择排序
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int data;
}ElemType,*ELemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
void InitList_SqList(SqList* L);
void Build(SqList* L);
void function1(SqList* L);
void display(SqList* L);
void InitList_SqList(SqList* L){
L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (L->elem == NULL) {
// 如果内存分配失败,打印错误信息并退出程序
printf("Memory allocation failed!\n");
exit(EXIT_FAILURE); // 使用exit函数退出程序,返回非零状态码表示错误
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
}
void Build(SqList* L){
int i,j;
printf("请输入您想输入的元素个数:");
scanf("%d",&i);
L->length=i;
for(j=0;j<i;j++){
int k;
printf("\n请输入第%d个数:",j+1);
scanf("%d",&k);
L->elem[j].data=k;
}
}
void function1(SqList* L){
int i,j,temp,min;
for(i=0;i<L->length-1;i++){
min=i;
for(j=i+1;j<L->length;j++){
if(L->elem[j].data<L->elem[min].data){
min=j;
}
}
if(min!=i){
temp=L->elem[min].data;
L->elem[min].data=L->elem[i].data;
L->elem[i].data=temp;
}
}
}
void display(SqList* L){
int i=0;
for(i;i<L->length;i++){
printf("%d ",L->elem[i].data);
}
printf("\n");
}
int main(){
SqList A;
InitList_SqList(&A);
Build(&A);
display(&A);
function1(&A);
display(&A);
}
06 模式匹配问题(较为笨、粗暴的方法
#include<stdio.h>
#include<string.h>
#define size 100
typedef struct{
char data[size];
int length;
}sqlist;
void init(sqlist *list);
void insert0(sqlist *list,char element);
int patternmatch(sqlist *list,char *element);
void insert1(sqlist *list);
void display(sqlist *list);
int main(){
sqlist list;
char a[100];
insert1(&list);
display(&list);
printf("\n请输入您想要查找的字符:");
scanf("%s",a);
int position=patternmatch(&list,a);
if(position!=-1)
{
printf("\n找到匹配的模式,起始位置为%d",position+1);
}
else
{
printf("\n未找到匹配的模式");
}
}
void init(sqlist *list){
list->length=0;
}
void insert0(sqlist *list,char element){
if(list->length>=size){
printf("error");
}
else{
list->data[list->length]=element;
list->length++;
}
}
void insert1(sqlist *list){
init(list);
int m;
char n;
printf("\n请输入您想要的元素数:");
scanf("%d",&m);
printf("\n请输入:");
for(int i=1;i<=m;i++){
scanf(" %c",&n);
insert0(list,n);
}
}
void display(sqlist *list){
for(int i=0;i<list->length;i++){
printf("%c\t",list->data[i]);
}
}
int patternmatch(sqlist *list,char *element){
int i,j;
int len;
len=strlen(element);
for(i=0;i<=list->length-len;i++){
for(j-0;j<len;j++){
if(list->data[i+j]!=element[j])
{
break;
}
}
if(len==j){
return i;
}
}
return -1;
}