1、单链表简单选择排序
输入:输入多个整型数创造链表L(-1表示输入结束)。
输出:输出链表L简单选择排序后的升序序列。
优化目标:无
#include#include struct ListNode { int data; struct ListNode *next; }; void selectsort(struct ListNode *L)//简单选择排序 { struct ListNode *i=L; struct ListNode *min,*j; int temp; for(;i->next!=NULL;i=i->next){ min=i; for(j=i->next;j!=NULL;j=j->next){//找到本次最小值结点 if(min->data>j->data)min=j; } if(min!=i){//交换结点数据 temp=i->date; i->date=min->date; min->date=temp; } } } struct ListNode* readlist()//创建链表 { struct ListNode *head=NULL,*tail=NULL,*p=NULL; int data; scanf("%d", &data); while (data!=-1) { p=(struct ListNode*)malloc(sizeof(struct ListNode)); p->data=data; p->next=NULL; if (head==NULL) head=p; else tail->next=p; tail=p; scanf("%d", &data); } return head; } void printlist(struct ListNode *L )//打印链表 { struct ListNode *p=L; while (p) { printf("%d ", p->data); p=p->next; } printf("n"); } int main() { int m; struct ListNode *L=readlist(); printlist(L); selectsort(L); printlist(L); return 0; }
2、顺序表:
输入:输入整型数创造顺序表L
输出:输出顺序表L的各种操作
优化目标:无
#include#include #define ElemType int #define MaxSize 100 //顺序表的最大长度 typedef struct{ ElemType *data; //存储空间基址 int length; }SqList; //初始化顺序表,创建一个空表 SqList* InitList() { //申请内存 SqList* L=(SqList*)malloc(sizeof(SqList)); L->data=(ElemType *)malloc(MaxSize*sizeof(ElemType)); if(!L->data) { printf("存储空间分配失败!"); } L->length = 0; } //创建指定大小的顺序表 void CreateSqList(SqList *L, int n) //n为需要创建顺序表的长度 { int i=0; if(n>MaxSize||n<1) { printf("顺序表的长度非法"); } else { printf("请输入%d个数据:", n); for(;i data[i]); L->length++; } } } //打印顺序表 void PrintSqList(SqList *L) { int i; printf("打印出的顺序表为:n"); printf("***********************n"); for(i=0;i length;i++) { printf("%d ",L->data[i]); } printf("n***********************n"); } //插入函数,位置i插入数据,i及之后元素后移 1=L.length+1) //判断位置是否有效 { printf("位置无效!!!n"); return false; } if (L.length>=MaxSize)//判断存储空间是否已满 { printf("当前存储空间已满!!!n"); return false; } for (int j=L.length;j>=i;j--)//位置i及之后元素后移 { L.data[j]=L.data[j-1]; } L.data[i-1]=e; L.length++; return true; } //删除函数,删除位置i的元素,i之后的元素依次前移 bool ListDelete(SqList L, int i) { if (i<1||i>L.length) { printf("位置无效!!!n"); return false; } for (int j=i;j<=L.length-1;j++)//位置i之后元素依次前移覆盖 { L.data[j-1]=L.data[j]; } L.length--; return true; } void delete(Sqlist L,int i,int j)//删除算法的扩展(删除下标i-j的元素) { int k,delta; delete=j+1-i;//i和j+1之间相差的值 for(k=j+1;k temp) --j; //j从右往左扫描,当碰到第一个比temp小的元素时停止,并且每一步都要判断i是否小于j if(i 总结:今天练习了顺序表基本操作和链表选择排序,明天计划练习栈和队列的题。



