13、结构体实现

#include <stdio.h>
#include <string.h>
struct Person
{
char name[20];
int count;
}leader[3]={"Li",0,"Wang",0,"Zhang",0};
int main(){
int i,j;
char leader_name[20];
for(i=0;i<=10;i++){
scanf("%s",leader_name);
for(j=0;j<3;j++){
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
}
printf("\nResult:\n");
for(i=0;i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count );
return 0;
}

14.单链表实现
#include <stdio.h>
#include <stdlib.h>
typedef enum{false,true} bool;
typedef struct node{
int data;
struct node *next;
} LinkNode;
LinkNode *InitList(){
LinkNode *L;
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
L->data=0;
return L;
}
void DestroyList(LinkNode *L){
LinkNode *p,*t;
p=L;
do{
t=p;
p=p->next;
free(t);
} while(p!=NULL);
}
bool IsEmpty(LinkNode *L){
if(L->next==NULL)
return true;
else return false;
}
int ListLength(LinkNode *L){
int n=0;
LinkNode *p=L;
while(p->next!=NULL){
n++;
p=p->next;
}
return n;
}
void DispList(LinkNode *L){
LinkNode *p=L;
while(p->next!=NULL){
printf("%d ,",p->next->data);
p=p->next;
}
printf("\n");
}
int GetElem(LinkNode *L,int i){
int j=0,t=-1;
LinkNode *p=L;
if(i<=0)
printf("链表不存在该位置\n");
else{
while(j<i && p->next!=NULL){
j++;
p=p->next;
}
if(j==i)
t=p->data;
else
printf("链表不存在该位置\n");
}
return t;
}
int LocatElem(LinkNode *L,int e){
int i=0,flag=0;
LinkNode *p=L;
while(p->next!=NULL){
i++;
if(p->next->data==e){
flag=1;
break;
}
p=p->next;
}
if(flag==1) return i;
else return 0;
}
void ListInsertF(LinkNode *L,int e){
LinkNode *p;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=L->next;
L->next=p;
L->data++;
}
void ListInsertR(LinkNode *L,int e){
LinkNode *p,*q=L;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=NULL;
while(q->next!=NULL)
q=q->next;
q->next=p;
L->data++;
}
void ListInsert1(LinkNode *L,int e,int i){
int j=1;
LinkNode *p,*q=L;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=NULL;
if(i<=0)
printf("链表不存在该位置\n");
else{
while(j<i && q->next!=NULL){
j++;
q=q->next;
}
if(j!=i)
printf("链表不存在该位置\n");
else{
p->next=q->next;
q->next=p;
L->data++;
}
}
}
void ListInsert2(LinkNode *L,int e){
LinkNode *p,*q=L;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=NULL;
while(q->next!=NULL&&q->next->data<=e)
q=q->next;
p->next=q->next;
q->next=p;
L->data++;
}
void ListDelete1(LinkNode *L,int i){
int j=0;
LinkNode *p,*q=L;
if(i<=0)
printf("不存在要删除的数据!");
else{
while(j<i-1 && q->next!=NULL){
j++;
q=q->next;
}
if(q->next==NULL)
printf("不存在要删除的数据!");
else{
p=q->next;
q->next=p->next;
free(p);
}
}
}
void ListDelete2(LinkNode *L,int e){
LinkNode *p,*q=L;
while(q->next!=NULL){
p=q->next;
if(p->data==e){
q->next=p->next;
free(p);
continue;
}
q=q->next;
}
}
int main(){
LinkNode *L=InitList();
int n,e,i;
int *t;
printf("请输入链表初始化元素个数:\n");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("请输入插入数据:\n");
scanf("%d",&e);
ListInsertF(L,e);
}
DispList(L);
printf("\n链表长度为:%d\n",ListLength(L));
printf("链表第2位数字是:%d\n",GetElem(L,2));
printf("3所在的位置是:%d\n",LocatElem(L,3));
ListInsert1(L,200,2);
DispList(L);
ListInsert2(L,300);
DispList(L);
ListDelete1(L,3);
DispList(L);
ListDelete2(L,300);
DispList(L);
return 0;
}
15、双链表
#include <stdio.h>
#include <stdlib.h>
typedef enum {false,true} bool;
typedef struct node{
int data;
struct node *prior;
struct node *next;
}LinkNode;
LinkNode *InitList(){
LinkNode *L;
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
L->prior=NULL;
L->data=0;
return L;
}
void DestroyList(LinkNode *L){
LinkNode *p,*t;
p=L;
do{
t=p;
p=p->next;
free(t);
}while(p!=NULL);
}
bool IsEmpty(LinkNode *L){
if(L->next==NULL)
return true;
else return false;
}
int ListLength(LinkNode *L){
int n=0;
LinkNode *p=L;
while(p->next!=NULL){
n++;
p=p->next;
}
return n;
}
void DispList(LinkNode *L){
LinkNode *p=L;
while(p->next!=NULL){
printf("%d ,",p->next->data);
p=p->next;
}
printf("\n");
}
int GetElem(LinkNode *L,int i){
int j=0,t=-1;
LinkNode *p=L;
if(i<=0)
printf("链表不存在该位置\n");
else{
while(j<i&&p->next!=NULL){
j++;
p=p->next;
}
if(j==i)
t=p->data;
else
printf("链表不存在该位置\n");
}
return t;
}
int LocatElem(LinkNode *L,int e){
int i=0,flag=0;
LinkNode *p=L;
while(p->next!=NULL){
i++;
if(p->next->data==e){
flag=1;
break;
}
p=p->next;
}
if(flag==1) return i;
else return 0;
}
void ListInsertF(LinkNode *L,int e){
LinkNode *p;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=L->next;
if(L->next!=NULL)
L->next->prior=p;
L->next=p;
p->prior=L;
L->data++;
}
void ListInsertR(LinkNode *L,int e){
LinkNode *p,*q=L;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=NULL;
while(q->next!=NULL)
q=q->next;
q->next=p;
p->prior=q;
L->data++;
}
void ListInsert1(LinkNode *L,int e,int i){
int j=1;
LinkNode *p,*q=L;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=NULL;
if(i<=0)
printf("链表不存在该位置\n");
else{
while(j<i&&q->next!=NULL){
j++;
q=q->next;
}
if(j!=i)
printf("链表不存在该位置\n");
else{
p->next=q->next;
if(q->next!=NULL)
q->next->prior=p;
q->next=p;
p->prior=q;
}
}
}
void ListInsert2(LinkNode *L,int e){
LinkNode *p,*q=L;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=NULL;
while(q->next!=NULL&&q->next->data<=e)
q=q->next;
p->next=q->next;
if(q->next!=NULL)
p->next->prior=p;
q->next=p;
p->prior=q;
L->data++;
}
void ListDelete1(LinkNode *L,int i){
int j=0;
LinkNode *p,*q=L;
if(i<=0)
printf("不存在要删除的数据!");
else{
while(j<i-1 && q->next!=NULL){
j++;
q=q->next;
}
if(q->next==NULL)
printf("不存在要删除的数据!");
else{
p=q->next;
if(p->next!=NULL)
p->next->prior=q;
q->next=p->next;
free(p);
L->data--;
}
}
}
void ListDelete2(LinkNode *L,int e){
LinkNode *p,*q=L;
while(q->next!=NULL){
p=q->next;
if(p->data=e){
if(p->next!=NULL)
p->next->prior=q;
q->next=p->next;
free(p);
L->data--;
continue;
}
q=q->next;
}
}
int main(){
LinkNode *L=InitList();
int n,e,i;
int *t;
printf("请输入链表初始化元素个数:\n");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("请输入插入数据:\n");
scanf("%d",&e);
ListInsertF(L,e);
}
DispList(L);
printf("\n链表长度为:%d\n",ListLength(L));
printf("链表第2位数字是:%d\n",GetElem(L,2));
printf("3所在的位置是:%d\n",LocatElem(L,3));
ListInsert1(L,200,2);
DispList(L);
ListInsert2(L,300);
DispList(L);
ListDelete1(L,3);
DispList(L);
ListDelete2(L,300);
DispList(L);
return 0;
}