Эта программа имеет приоритетную очередь, где я сохраняю строку, поскольку данные и очередь создаются с использованием связанного списка, элемент с наименьшим номером (в качестве приоритета нет) имеет более высокий приоритет, то есть он будет вставлен в головной узел и, таким образом, пока времяудаления (pop или dequeue) этот элемент будет удален первым (например, 1 имеет более высокий приоритет, чем 2)
#include<stdio.h>
#include<stdlib.h>
struct node {
char *string;
int priority;
struct node* next;
};
struct node *head;
struct node* getnewnode(char *s,int p){
struct node* newnode=(struct node*)malloc(sizeof(struct node));
newnode->string=s;
newnode->priority=p;
newnode->next=NULL;
return newnode;
}
void push(char* str,int p){
struct node* node1=getnewnode(str,p);
if(head==NULL){ //if the element is inserted in empty list
head=node1;
}
if(head->priority > p )
{
node1->next=head;
head=node1;
}
else
{
struct node* temp=head;
while(temp->next!=NULL&&temp->priority <= p){
temp=temp->next;
}
while(temp->next!=NULL&&temp->priority <= p)
правильно или нет, потому что если приоритет выдвигаемого элемента равенсоответствующий этому новому элементу будет помещен после текущего (имеющего тот же приоритет)
node1->next=temp->next;
temp->next=node1;
}
}
void pop(){
struct node* temp=head;
head=head->next;
free(temp);
}
char* peek(){
return head->string;
}
int main(){
head=NULL; //head is null initially
char a[10]="akash";
push(a,1);
char b[20]="rahul";
push(b,3);
printf("%s",peek());
}
Не отображается желаемый результат, но происходит сбой
int main(){
head=NULL;
char* a=(char *)malloc(sizeof(char)*10);
a="akash";
push(a,1);
char* b=(char *)malloc(sizeof(char)*10);
b="rahul";
push(b,3);
char* c=(char *)malloc(sizeof(char)*10);
c="neymar";
push(c,1);
printf("%s",peek());
pop();
printf("%s",peek());
}
Я даюakash как приоритет 1, rahul как 2 и neymar снова как 1, он должен напечатать akash и neymar для последних двух операторов printf, но он печатает akash rahul @ dbush